Ответы:
В текущем lib.d.ts нет определенных обещаний, поэтому вам нужен дополнительный файл определения для него, поэтому вы получаете ошибки компиляции.
Вы можете, например, использовать (как говорит @elclanrs) использовать пакет es6-prom с файлом определения из ОпределенноТипед: определение es6-обещания
Затем вы можете использовать его так:
var p = new Promise<string>((resolve, reject) => {
resolve('a string');
});
edit Вы можете использовать его без определения при нацеливании на ES6 (с компилятором TypeScript). Обратите внимание, что вам по-прежнему требуется, чтобы Promise существовал во время выполнения, конечно (поэтому он не будет работать в старых браузерах :)). Добавьте / отредактируйте следующее в свой tsconfig.json
:
"compilerOptions": {
"target": "ES6"
}
edit 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-prom в качестве зависимости. Tsc --init создаст tsconfig.json
файл для тебя.
Теперь вы можете использовать обещание в своем файле машинописного текста 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"
]
}
Используйте НПМ для установкиes6-shim
из типов организации .
npm install @types/es6-shim --save-dev
До TypeScript 2.0 используйте типизацию, чтобы установить 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 - Не удается найти имя «Обещание» и не удается найти имя «Требовать»
es2016
- не лучшая идея, если ваша цель не поддерживает ES2016. Многие браузеры поддерживают обещания, но не все в ES2016. Используйте, es2015.promise
чтобы включать только типы для обещаний, не втягивая типы для всего в ES2016.
Начиная с TypeScript 2.0 вы можете включать типизацию для собственных обещаний, включив в свой tsconfig.json
"compilerOptions": {
"lib": ["es5", "es2015.promise"]
}
Это будет включать объявления обещаний, которые идут с TypeScript, без необходимости устанавливать цель на ES6.
Если вы используете 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
Установка npm не требуется, поскольку ES6 Promises является родным.
Проект Node.js -> Свойства -> вкладка Typescript Build Версия 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"
TypeScript версии ниже 2.0:
typings install es6-promise --save --global --source dt
Б. При использовании "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