Comment utiliser Typescript avec des promesses ES6 natives
Je suis un débutant complet à Typescript et je me demande s'il est possible d'utiliser des promesses ES6 dans Typescript et ce que je devrais faire pour les faire fonctionner. J'exécute le nœud 0.11.14 et j'obtiens une erreur lors de la compilation "impossible de trouver le nom 'Promise' "
8 réponses
La lib actuelle.D. ts n'a pas de promesses définies, donc vous avez besoin d'un fichier de définition supplémentaire pour cela, c'est pourquoi 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: ES6-promise definition
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 lors du ciblage D'ES6 (avec le compilateur TypeScript) - Notez que vous avez toujours besoin de la promesse d'exister dans le runtime ofcourse (donc cela ne fonctionnera pas dans les anciens navigateurs :))
Ajoutez / modifiez ce qui suit à votre tsconfig.json
:
"compilerOptions": {
"target": "ES6"
}
Modifier 2 Lorsque 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éer un fichier package.json
avec seulement { }
comme contenu (si vous n'avez pas de paquet.json déjà.
Appelez npm install --save @types/es6-promise
et tsc --init
. La première commande npm install changera votre package.json
pour inclure la promesse es6 en tant que dépendance. tsc --init va créer 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 devriez avoir aucune erreur.
Alternative # 1
Utilisez les options du compilateur target
et lib
pour compiler directement dans es5
sans avoir besoin d'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"
]
}
Alternative # 2
Utiliser NPM pour installer le es6-shim
de la types d'organisation.
npm install @types/es6-shim --save-dev
Alternative # 3
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
Le typings
option utilise npm
pour installer typings
globalement, puis utilise typings
pour installer la cale. Le préfixe dt~
signifie télécharger le shim de DefinitelyTyped. L'option --global
signifie que les types de shim seront disponibles tout au long du projet.
Voir aussi
Https://github.com/Microsoft/TypeScript/issues/7788, Impossible de trouver le nom de "Promesse" & Ne peut pas trouver le nom de 'besoin'
À partir de TypeScript 2.0, vous pouvez inclure des typages pour les promesses natives en incluant ce qui suit 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 comme:
tsc a.ts --target es6 --module commonjs
Plus d'Informations: https://github.com/Microsoft/TypeScript/wiki/Compiler-Options
Si vous utilisez tsconfig.json
, alors, comme ceci:
{
"compilerOptions": {
"module": "commonjs",
"target": "es6"
}
}
Plus d'Informations: https://github.com/Microsoft/TypeScript/wiki/tsconfig.json
C'est la façon la plus récente de le faire, la réponse ci-dessus est obsolète:
typings install --global es6-promise
A. Si vous utilisez "target": "es5"
et la version TypeScript ci-dessous 2.0:
typings install es6-promise --save --global --source dt
B. Si vous utilisez "target": "es5"
et TypeScript version 2.0 ou higer:
"compilerOptions": {
"lib": ["es5", "es2015.promise"]
}
C. Si vous utilisez "target": "es6"
, il n'y a pas besoin de faire quoi que ce soit.
Utilisation de promesses ES6 natives avec Typescript dans Visual Studio 2015 + Node.outils js 1.2
Aucune installation npm requise car ES6 Promises est native.
Noeud.js projet -> Propriétés -> Tapuscrit onglet Construire 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);
}
);
J'ai dû rétrograder @types/core-js
à 9.36 pour le faire fonctionner avec "target": "es5"
set dans mon tsconfig.
"@types/core-js": "0.9.36",