Je suis un débutant en texte type et je me demande s’il est possible d’utiliser les promesses ES6 dans TypeScript et ce que je devrais faire pour les faire fonctionner. J'exécute le noeud 0.11.14 et j'obtiens une erreur lors de la compilation "Impossible de trouver le nom 'Promise'"
Le fichier lib.d.ts actuel n'a pas de promesse définie, vous avez donc besoin d'un fichier de définition supplémentaire, raison pour laquelle vous obtenez des erreurs de compilation.
Vous pouvez par exemple utiliser (comme le dit @elclanrs) le paquet es6-promise avec le fichier de définition de DefinitelyTyped: définition d'es6-promise
Vous pouvez ensuite l'utiliser comme ceci:
var p = new Promise<string>((resolve, reject) => {
resolve('a string');
});
edit Vous pouvez l'utiliser sans définition lorsque vous ciblez ES6 (avec le compilateur TypeScript) - Notez que vous avez toujours besoin de la promesse pour qu'elle existe cela ne fonctionnera pas dans les anciens navigateurs :)) Ajoutez/modifiez ce qui suit dans votre tsconfig.json
:
"compilerOptions": {
"target": "ES6"
}
edit 2 Quand TypeScript 2.0 sortira, les choses changeront un peu (bien que ci-dessus fonctionne toujours) mais les fichiers de définition peuvent être installés directement avec npm comme ci-dessous:
npm install --save @types/es6-promise
- source
edit3 Mise à jour de la réponse avec plus d’informations sur l’utilisation des types.
Créez un fichier package.json
avec uniquement { }
comme contenu (si vous n'avez pas encore de package.json. Appelez npm install --save @types/es6-promise
et tsc --init
. La première commande d'installation npm sera changez votre package.json
pour inclure es6-promise en tant que dépendance. tsc --init créera un fichier tsconfig.json
pour vous.
Vous pouvez maintenant utiliser la promesse dans votre fichier TypeScript var x: Promise<any>;
. Exécutez tsc -p .
pour compiler votre projet. Vous ne devriez avoir aucune erreur.
Utilisez les options du compilateur target
et lib
pour compiler directement dans es5
sans avoir à installer le es6-shim
. (Testé avec TypeScript 2.1.4
). Dans la section lib, utilisez es2016
ou es2015.promise
.
// tsconfig.json
{
"compilerOptions": {
"target": "es5",
"lib": [
"es2015.promise",
"dom"
]
},
"include": [
"src/**/*.ts"
],
"exclude": [
"node_modules"
]
}
tilisez NPM pour installer le es6-shim
de la organisation des types .
npm install @types/es6-shim --save-dev
Avant TypeScript 2.0, utilisez typings pour installer le es6-shim
globalement à partir de DefinitelyTyped .
npm install typings --global --save-dev
typings install dt~es6-shim --global --save-dev
L'option typings
utilise npm
pour installer typings
globalement, puis typings
pour installer la cale. Le préfixe dt~
signifie télécharger la cale de DefinitelyTyped. L'option --global
signifie que les types de cales seront disponibles tout au long du projet.
https://github.com/Microsoft/TypeScript/issues/7788 - Impossible de trouver le nom 'Promise' ni le nom 'require'
À partir de TypeScript 2.0, vous pouvez inclure des typages pour les promesses natives en incluant les éléments suivants dans votre tsconfig.json
"compilerOptions": {
"lib": ["es5", "es2015.promise"]
}
Cela inclura les déclarations de promesse fournies avec TypeScript sans avoir à définir la cible sur ES6.
Si vous utilisez node.js 0.12 ou supérieur/TypeScript 1.4 ou supérieur, ajoutez simplement des options de compilateur telles que:
tsc a.ts --target es6 --module commonjs
Plus d'infos: https://github.com/Microsoft/TypeScript/wiki/Compiler-Options
Si vous utilisez tsconfig.json
, alors procédez comme suit:
{
"compilerOptions": {
"module": "commonjs",
"target": "es6"
}
}
Plus d'infos: https://github.com/Microsoft/TypeScript/wiki/tsconfig.json
C'est la façon la plus récente de procéder, la réponse ci-dessus est obsolète:
typings install --global es6-promise
A. Si vous utilisez "target": "es5"
et la version TypeScript inférieure à 2.0:
typings install es6-promise --save --global --source dt
B. Si vous utilisez "target": "es5"
et TypeScript version 2.0 ou supérieure:
"compilerOptions": {
"lib": ["es5", "es2015.promise"]
}
C. Si vous utilisez "target": "es6"
, vous n'avez rien à faire.
Aucune installation npm requise car ES6 Promises est natif.
projet Node.js -> Propriétés -> Onglet TypeScript Build Version ECMAScript = ECMAScript6
import http = require('http');
import fs = require('fs');
function findFolderAsync(directory : string): Promise<string> {
let p = new Promise<string>(function (resolve, reject) {
fs.stat(directory, function (err, stats) {
//Check if error defined and the error code is "not exists"
if (err && err.code === "ENOENT") {
reject("Directory does not exist");
}
else {
resolve("Directory exists");
}
});
});
return p;
}
findFolderAsync("myFolder").then(
function (msg : string) {
console.log("Promise resolved as " + msg);
},
function (msg : string) {
console.log("Promise rejected as " + msg);
}
);