回答:
現在のlib.d.tsには約束が定義されていないため、追加の定義ファイルが必要です。そのため、コンパイルエラーが発生します。
たとえば、(@ elclanrsが言うように)DefinitelyTypedの定義ファイルでes6-promiseパッケージを使用することができます:es6-promise定義
その後、次のように使用できます。
var p = new Promise<string>((resolve, reject) => {
resolve('a string');
});
edit 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は、コマンドをインストールし、あなたの変更されますpackage.json
依存関係としてES6-約束を含めること。TSC --init作成するtsconfig.json
ファイルをあなたのために。
typescriptファイルでpromiseを使用できるようになりましたvar x: Promise<any>;
。実行tsc -p .
してプロジェクトをコンパイルします。エラーはないはずです。
--save-dev
代わりにフラグを使用する必要があると思います--save
。
target
およびlib
コンパイラオプションを使用して、es5
をインストールすることなく直接コンパイルできますes6-shim
。(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
して、types組織からをインストールします。
npm install @types/es6-shim --save-dev
TypeScript 2.0以前は、タイピングを使用es6-shim
してDefinitelyTypedからグローバルにインストールしていました。
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」が見つからない
es2016
ターゲットがES2016をサポートしていない限り、含めることはお勧めできません。ES2016には、promiseをサポートするブラウザーが多数ありますが、すべてをサポートしているわけではありません。es2015.promise
ES2016のすべての型を取り込むことなく、promiseの型のみを含めるために使用します。
TypeScript 2.0以降、次のコードを含めることにより、ネイティブプロミスのタイプを含めることができます。 tsconfig.json
"compilerOptions": {
"lib": ["es5", "es2015.promise"]
}
これには、ターゲットをES6に設定せずにTypeScriptに付属するpromise宣言が含まれます。
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
ES6 Promiseはネイティブなので、npmのインストールは必要ありません。
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);
}
);
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"
、何もする必要はありません。
"target": "es6"
TypeScript 2.1.1 を使用していCannot find name 'Promise'
ますが、まだ使用できます。
es6-promise