Ответы:
В текущем 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