私はTypeScriptの完全な初心者で、TypeScriptでES6の約束を使用することが可能かどうか、そしてそれらを機能させるために何をしなければならないのかと思います。ノード0.11.14を実行していて、コンパイル中に「名前 'Promise'が見つかりません」というエラーが表示される
現在の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-promise
とtsc --init
を呼び出します。最初のnpm installコマンドは、package.json
を変更して、依存関係としてes6-promiseを含めます)。 initはあなたのためにtsconfig.json
ファイルを作成します。
TypeScriptファイルvar x: Promise<any>;
の中で約束を使用することができます。プロジェクトをコンパイルするためにtsc -p .
を実行してください。エラーがないはずです。
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"
]
}
インストールにNPMを使用型編成 からのes6-shim
。
npm install @types/es6-shim --save-dev
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'が見つかりません
TypeScript 2.0では、あなたのtsconfig.json
に以下を含めることでネイティブな約束のためのタイピングを含めることができます。
"compilerOptions": {
"lib": ["es5", "es2015.promise"]
}
これには、ターゲットをES6に設定しなくてもTypeScriptに付属の約束宣言が含まれます。
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
これを行うための最新の方法です。上記の答えは古くなっています。
typings install --global es6-promise
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"
を使っているなら、何もする必要はありません。
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);
}
);