web-dev-qa-db-ja.com

Type ESをネイティブのES6 Promiseで使用する方法

私はTypeScriptの完全な初心者で、TypeScriptでES6の約束を使用することが可能かどうか、そしてそれらを機能させるために何をしなければならないのかと思います。ノード0.11.14を実行していて、コンパイル中に「名前 'Promise'が見つかりません」というエラーが表示される

118
dchang

現在のlib.d.tsはそれに定義された約束を持っていないので、追加の定義ファイルが必要です。それがコンパイルエラーを起こしている理由です。

例えば、(@elclanrsが言うように)DefinitelyTypedの定義ファイルと一緒にes6-promiseパッケージを使うことができます。 es6-promise definition

あなたはそれからこのようにそれを使うことができます:

var p = new Promise<string>((resolve, reject) => { 
    resolve('a string'); 
});

editES6をターゲットにしている場合(TypeScriptコンパイラを使用している場合)、定義なしで使用することができます。古いブラウザでは動作しません:))tsconfig.jsonに以下を追加/編集してください。

"compilerOptions": {
    "target": "ES6"
}

edit 2TypeScript 2.0が出てくると少し変わってきますが(上の例でも動作します)、定義ファイルは以下のようにnpmで直接インストールできます。

npm install --save @types/es6-promise - ソース

edit3型を使用するためのより詳しい情報で回答を更新しています。

内容としてpackage.jsonのみを含む{ }ファイルを作成します(まだpackage.jsonを持っていない場合。npm install --save @types/es6-promisetsc --initを呼び出します。最初のnpm installコマンドは、package.jsonを変更して、依存関係としてes6-promiseを含めます)。 initはあなたのためにtsconfig.jsonファイルを作成します。

TypeScriptファイルvar x: Promise<any>;の中で約束を使用することができます。プロジェクトをコンパイルするためにtsc -p .を実行してください。エラーがないはずです。

121

代替案1

es5をインストールする必要なしにes6-shimに直接コンパイルするには、targetおよびlibコンパイラオプションを使用します。 (TypeScript 2.1.4でテスト済み) libセクションでは、es2016またはes2015.promiseを使用してください。

// tsconfig.json
{
    "compilerOptions": {
        "target": "es5",
        "lib": [
            "es2015.promise",
            "dom"
        ]
    },
    "include": [
        "src/**/*.ts"
    ],
    "exclude": [
        "node_modules"
    ]
}

代替案2

インストールにNPMを使用型編成 からのes6-shim

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

代替案#3

TypeScript 2.0より前のバージョンでは、 Typings を使用して DefinitelyTyped からグローバルにes6-shimをインストールしていました。

npm install typings --global --save-dev
typings install dt~es6-shim --global --save-dev

typingsオプションは、npmを使用してtypingsをグローバルにインストールし、次にtypingsを使用してシムをインストールします。 dt~接頭辞は、DefinitelyTypedからシムをダウンロードすることを意味します。 --globalオプションは、シムの型がプロジェクトを通して利用可能になることを意味します。

また見なさい

https://github.com/Microsoft/TypeScript/issues/7788 - 名前 'Promise'が見つかりません&名前 'require'が見つかりません

47
Shaun Luttin

TypeScript 2.0では、あなたのtsconfig.jsonに以下を含めることでネイティブな約束のためのタイピングを含めることができます。

"compilerOptions": {
    "lib": ["es5", "es2015.promise"]
}

これには、ターゲットをES6に設定しなくてもTypeScriptに付属の約束宣言が含まれます。

23
paldepind

Node.js 0.12以上/ TypeScript 1.4以上を使用している場合は、次のようなコンパイラオプションを追加してください。

tsc a.ts --target es6 --module commonjs

詳細情報: https://github.com/Microsoft/TypeScript/wiki/Compiler-Options

tsconfig.jsonを使うのなら、このように

{
    "compilerOptions": {
        "module": "commonjs",
        "target": "es6"
    }
}

詳細情報: https://github.com/Microsoft/TypeScript/wiki/tsconfig.json

13
Plantain Yao

これを行うための最新の方法です。上記の答えは古くなっています。

typings install --global es6-promise

12
Nick Kenens

A. "target": "es5"と2.0未満のTypeScriptバージョンを使用している場合:

typings install es6-promise --save --global --source dt

B. "target": "es5"およびTypeScriptバージョン2.0以降を使用している場合:

"compilerOptions": {
    "lib": ["es5", "es2015.promise"]
}

C. "target": "es6"を使っているなら、何もする必要はありません。

6
Vaz

Visual Studio 2015 + Node.jsツール1.2でTypeScriptでネイティブのES6 Promiseを使用

ES6プロミスとしてネイティブインストールは不要です。

Node.jsプロジェクト - > [プロパティ] - > [TypeScriptビルド]タブ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); 
    }
);
5