javascript - then - Comment utiliser Typescript avec ES6 Promises natif




typescript promise (6)

Utilisation de ES6 natif Promises avec Typescript dans les outils Visual Studio 2015 + Node.js 1.2

Aucune installation npm requise car ES6 Promises est natif.

Projet Node.js -> Propriétés -> onglet Génération Typescript ECMAScript version = 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); 
    }
);

https://code.i-harness.com

Je suis un débutant en caractères dactylographiés et je me demande s’il est possible d’utiliser les promesses ES6 dans Typescript et ce que j’aurais à 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'"


Alternative n ° 1

Utilisez les options du compilateur target et lib pour compiler directement dans es5 sans avoir à installer 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 n ° 2

source es6-shim partir des types d’organisation .

npm install @types/es6-shim --save-dev

Alternative n ° 3

Avant TypeScript 2.0, utilisez des typings pour installer 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 les typings globalement, puis pour l’installer. Le préfixe dt~ signifie télécharger la cale de DefinitelyTyped. L'option --global signifie que les types de --global seront disponibles tout au long du projet.

Voir également

https://github.com/Microsoft/TypeScript/issues/7788 - Impossible de trouver le nom 'Promise' ni le nom 'require'


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.


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


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 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 la promesse doit toujours exister dans le cycle d’exécution (elle ne fonctionnera donc pas dans les anciens navigateurs :)) Ajoutez / modifiez les éléments suivants à 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 dont le contenu est seulement { } (si vous ne possédez pas encore package.json. Appelez npm install --save @types/es6-promise et tsc --init . La première commande npm install 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 dactylographié var x: Promise<any>; . Exécutez tsc -p . pour compiler votre projet. Vous ne devriez avoir aucune erreur.






es6-promise