Jawaban:
Lib.d.ts saat ini tidak memiliki promise di dalamnya sehingga Anda memerlukan file definisi tambahan untuk itu, itulah sebabnya Anda mendapatkan kesalahan kompilasi.
Anda bisa misalnya menggunakan (seperti @elclanrs mengatakan) menggunakan paket es6-promise dengan file definisi dari DefinitelyTyped: es6-promise definition
Anda kemudian dapat menggunakannya seperti ini:
var p = new Promise<string>((resolve, reject) => {
resolve('a string');
});
edit Anda dapat menggunakannya tanpa definisi saat menargetkan ES6 (dengan compiler TypeScript) - Perhatikan bahwa Anda masih memerlukan Promise untuk ada di runtime ofcourse (sehingga tidak akan berfungsi di browser lama :)) Tambahkan / Edit berikut ini ke tsconfig.json
:
"compilerOptions": {
"target": "ES6"
}
edit 2 Ketika TypeScript 2.0 akan keluar, hal-hal akan berubah sedikit (meskipun di atas masih berfungsi) tetapi file definisi dapat diinstal langsung dengan npm seperti di bawah ini:
npm install --save @types/es6-promise
- sumber
edit3 Memperbarui jawaban dengan lebih banyak info untuk menggunakan tipe.
Buat package.json
file dengan hanya { }
sebagai isinya (jika Anda belum memiliki package.json. Panggil npm install --save @types/es6-promise
dan tsc --init
. Perintah npm install pertama akan mengubah Anda package.json
untuk menyertakan es6-promise sebagai dependensi. Tsc --init akan membuat tsconfig.json
file untukmu.
Sekarang Anda dapat menggunakan promise dalam file skrip Anda var x: Promise<any>;
. Jalankan tsc -p .
untuk mengompilasi proyek Anda. Anda seharusnya tidak memiliki kesalahan.
--save-dev
harus digunakan sebagai pengganti --save
, karena perpustakaan hanya digunakan pada waktu kompilasi.
Gunakan opsi target
dan lib
kompiler untuk mengkompilasi langsung ke es5
tanpa perlu menginstal es6-shim
. (Diuji dengan TypeScript 2.1.4
). Di bagian lib, gunakan salah satu es2016
atau es2015.promise
.
// tsconfig.json
{
"compilerOptions": {
"target": "es5",
"lib": [
"es2015.promise",
"dom"
]
},
"include": [
"src/**/*.ts"
],
"exclude": [
"node_modules"
]
}
Gunakan NPM untuk menginstal yang es6-shim
dari organisasi jenis .
npm install @types/es6-shim --save-dev
Sebelum TypeScript 2.0, gunakan pengetikan untuk menginstal es6-shim
secara global dari DefinitelyTyped .
npm install typings --global --save-dev
typings install dt~es6-shim --global --save-dev
The typings
pilihan menggunakan npm
untuk menginstal typings
secara global dan kemudian menggunakan typings
untuk menginstal shim. The dt~
awalan berarti untuk men-download shim dari DefinitelyTyped. The --global
berarti pilihan itu jenis shim akan tersedia di seluruh proyek.
https://github.com/Microsoft/TypeScript/issues/7788 - Tidak dapat menemukan nama 'Promise' & Tidak dapat menemukan nama 'memerlukan'
es2016
bukanlah ide yang baik kecuali target Anda mendukung ES2016. Ada banyak browser yang mendukung promise tetapi tidak semuanya di ES2016. Gunakan es2015.promise
untuk menyertakan hanya tipe untuk promise tanpa menarik jenis untuk semuanya di ES2016.
Mulai TypeScript 2.0 Anda dapat memasukkan pengetikan untuk janji asli dengan menyertakan yang berikut ini di file tsconfig.json
"compilerOptions": {
"lib": ["es5", "es2015.promise"]
}
Ini akan mencakup deklarasi janji yang disertakan dengan TypeScript tanpa harus menyetel target ke ES6.
Jika Anda menggunakan node.js 0.12 atau lebih tinggi / typescript 1.4 atau lebih tinggi, cukup tambahkan opsi compiler seperti:
tsc a.ts --target es6 --module commonjs
Info selengkapnya: https://github.com/Microsoft/TypeScript/wiki/Compiler-Options
Jika Anda menggunakan tsconfig.json
, maka seperti ini:
{
"compilerOptions": {
"module": "commonjs",
"target": "es6"
}
}
Info selengkapnya: https://github.com/Microsoft/TypeScript/wiki/tsconfig.json
Ini cara terbaru untuk melakukan ini, jawaban di atas sudah usang:
typings install --global es6-promise
Tidak diperlukan instalasi npm karena ES6 Promises adalah native.
Proyek Node.js -> Properti -> Tab Bangun Typecript Versi 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);
}
);
"target": "es5"
A.Jika menggunakan dan TypeScript versi di bawah 2.0:
typings install es6-promise --save --global --source dt
"target": "es5"
B.Jika menggunakan dan TypeScript versi 2.0 atau lebih tinggi:
"compilerOptions": {
"lib": ["es5", "es2015.promise"]
}
C. Jika menggunakan "target": "es6"
, tidak perlu melakukan apa pun.
"target": "es6"
dengan TypeScript 2.1.1 dan saya masih mendapatkannya Cannot find name 'Promise'
.
es6-promise