Yanıtlar:
Şu anki lib.d.ts'de tanımlanmış vaatler yok, bu yüzden onun için fazladan bir tanım dosyasına ihtiyacınız var, bu yüzden derleme hataları alıyorsunuz.
Örneğin (@elclanrs'ın söylediği gibi), DefinitelyTyped'deki tanım dosyasıyla es6-promise paketini kullanabilirsiniz: es6-promise tanımı
Daha sonra bunu şu şekilde kullanabilirsiniz:
var p = new Promise<string>((resolve, reject) => {
resolve('a string');
});
düzenleme ES6'yı hedeflerken bir tanım olmadan kullanabilirsiniz (TypeScript derleyicisiyle) - Promise'in dersin çalışma zamanında var olmasını gerektirdiğini unutmayın (bu nedenle eski tarayıcılarda çalışmaz :)) Aşağıdakileri ekleyin / düzenleyin: tsconfig.json
:
"compilerOptions": {
"target": "ES6"
}
edit 2 TypeScript 2.0 çıktığında işler biraz değişecek (yine de yukarıda çalışıyor) ancak tanım dosyaları aşağıdaki gibi doğrudan npm ile kurulabilir:
npm install --save @types/es6-promise
- kaynak
edit3 Türleri kullanmak için daha fazla bilgi ile yanıtı güncelleme.
package.json
Yalnızca { }
içeriği olan bir dosya oluşturun (zaten bir package.json'a sahip değilseniz. Çağrı npm install --save @types/es6-promise
ve tsc --init
. İlk npm install komutu, package.json
bağımlılık olarak es6-promise'ı içerecek şekilde değiştirecektir . Tsc --init bir tsconfig.json
dosya oluşturacaktır senin için.
Artık typecript dosyanızdaki sözü kullanabilirsiniz var x: Promise<any>;
. tsc -p .
Projenizi derlemek için yürütün . Hiç hata yapmamalısın.
--save-dev
yerine kullanılması gerektiğini düşünüyorum --save
.
.Dll dosyasını kurmanıza gerek kalmadan doğrudan derlemek için target
ve lib
derleyici seçeneklerini kullanın . (TypeScript ile test edilmiştir ). Kitaplık bölümünde, veya kullanın .es5
es6-shim
2.1.4
es2016
es2015.promise
// tsconfig.json
{
"compilerOptions": {
"target": "es5",
"lib": [
"es2015.promise",
"dom"
]
},
"include": [
"src/**/*.ts"
],
"exclude": [
"node_modules"
]
}
Yüklemek için UÖM'yi kullanınes6-shim
gelen tipleri organizasyon .
npm install @types/es6-shim --save-dev
TypeScript 2.0'dan önce , DefinitelyTyped'den global olarak yüklemek için yazımları kullanın .es6-shim
npm install typings --global --save-dev
typings install dt~es6-shim --global --save-dev
typings
Seçeneği kullanır npm
yüklemek typings
küresel ve sonra kullandığı typings
şim kurmak için. dt~
Önek DefinitelyTyped şimi indirmek anlamına gelir. --global
Opsiyon aracı Shim en türleri proje boyunca kullanılabilir olacağını.
https://github.com/Microsoft/TypeScript/issues/7788 - 'Söz' adı bulunamıyor ve 'gerekli' adı bulunamıyor
es2016
Hedefiniz ES2016'yı desteklemediği sürece dahil etmek iyi bir fikir değildir. ES2016'da vaatleri destekleyen ancak her şeyi desteklemeyen birçok tarayıcı var. Kullanım es2015.promise
ES2016 her şey için türlerinde çekerek olmadan vaatler için sadece türlerini içerecek şekilde.
TypeScript 2.0'dan itibaren, yerel vaatler için yazımları, aşağıdakileri tsconfig.json
"compilerOptions": {
"lib": ["es5", "es2015.promise"]
}
Bu, hedefi ES6 olarak ayarlamak zorunda kalmadan TypeScript ile birlikte gelen vaat bildirimlerini içerecektir.
Node.js 0.12 veya üstünü / typescript 1.4 veya üstünü kullanıyorsanız, aşağıdaki gibi derleyici seçenekleri eklemeniz yeterlidir:
tsc a.ts --target es6 --module commonjs
Daha fazla bilgi: https://github.com/Microsoft/TypeScript/wiki/Compiler-Options
Eğer kullanırsan tsconfig.json
, şunu beğen:
{
"compilerOptions": {
"module": "commonjs",
"target": "es6"
}
}
Daha fazla bilgi: https://github.com/Microsoft/TypeScript/wiki/tsconfig.json
Bunu yapmanın en son yolu, yukarıdaki cevabın süresi doldu:
typings install --global es6-promise
ES6 Promises yerel olduğundan npm yüklemesi gerekmez.
Node.js projesi -> Özellikler -> Typescript Oluşturma sekmesi ECMAScript sürümü = 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"
TypeScript sürümü 2.0'ın altında kullanılıyorsa :
typings install es6-promise --save --global --source dt
B. "target": "es5"
TypeScript 2.0 veya higer kullanılıyorsa:
"compilerOptions": {
"lib": ["es5", "es2015.promise"]
}
C. Kullanıyorsanız "target": "es6"
, hiçbir şey yapmaya gerek yoktur.
"target": "es6"
TypeScript 2.1.1 ile kullanıyorum ve hala alıyorum Cannot find name 'Promise'
.
es6-promise