ウェブサイト検索

javascript - ネイティブES6 PromisesとTypescriptを使う方法


私はTypeScriptの完全な初心者で、TypeScriptでES6のPromiseを使用することが可能かどうか、またそれを動作させるために何をする必要があるのか知りたいです。私はNode 0.11.14を使用しており、コンパイル中に「Cannot find name 'Promise'」というエラーが発生しています。

回答 #1

現在の lib.d.ts には Promise が定義されていないので、それには追加の定義ファイルが必要です。そのため、コンパイルエラーが発生しています。

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

それから、このように使うことができます:

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

編集 ES6 をターゲットにする場合(TypeScript コンパイラ使用時)、定義なしで使用できます - もちろんランタイムに Promise が存在する必要があります(古いブラウザでは動作しません :) ) tsconfig.json に次の内容を追加/編集してください :

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

編集 2 TypeScript 2.0 がリリースされると多少状況は変わります(上記の方法もまだ使えます)が、定義ファイルは以下のように npm で直接インストールできます:

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

edit3 型を使用するための情報を追加して回答を更新しています。

package.json ファイルを作成し、その内容を { } のみにします(既に package.json がない場合)。npm install --save @types/es6-promise と tsc --init を実行してください。最初の npm install コマンドにより、package.json に es6-promise が依存関係として追加されます。tsc --init は tsconfig.json ファイルを作成します。

あなたは今、TypeScriptファイルで次のようにPromiseを使用できます: var x: Promise<any>;。プロジェクトをコンパイルするには、tsc -p . を実行してください。エラーは発生しないはずです。

回答 #2

代替案#1

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

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

代替案#2

types組織からes6-shimをインストールするには、NPMを使用してください。

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

代替案#3

TypeScript 2.0以前では、DefinitelyTypedからes6-shimをグローバルにインストールするためにtypingsを使用してください。

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' という名前が見つかりません

回答 #3

TypeScript 2.0 以降では、次の内容を tsconfig.json に含めることで、ネイティブのプロミス用の型定義を含めることができます

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

これは、ターゲットをES6に設定することなく、TypeScriptに付属するPromise宣言を含みます。

回答 #4

もし 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

回答 #5

これはこれを行う最も最近の方法であり、上記の回答は古くなっています:

typings install --global es6-promise

関連記事