8 ответов:
текущая библиотека.d.ts не имеет в нем определенных обещаний, поэтому вам нужен дополнительный файл определения для него, поэтому вы получаете ошибки компиляции.
вы могли бы, например, использовать (например, @elclanrs говорит) использовать пакет es6-promise с файлом определения из DefinitelyTyped:es6-promise definition
затем вы можете использовать его как это:
var p = new Promise<string>((resolve, reject) => { resolve('a string'); });edit вы можете использовать его без определения при таргетинге ES6 (с компилятором TypeScript) - обратите внимание, что вам все еще требуется обещание существовать во время выполнения курса (поэтому он не будет работать в старых браузерах :)) Добавьте / отредактируйте следующее в свой
tsconfig.json:"compilerOptions": { "target": "ES6" }edit 2 Когда TypeScript 2.0 выйдет, все немного изменится (хотя выше все еще работает), но файлы определения могут быть установлены непосредственно с npm, как показано ниже:
npm install --save @types/es6-promise-источникedit3 Обновление ответ с дополнительной информацией для использования типов.
создать С
{ }как содержимое (если у вас нет пакета.уже джсон. Звонитеnpm install --save @types/es6-promiseиtsc --init. Первая команда установки npm изменит вашpackage.jsonвключить es6-promise в качестве зависимости. tsc --init создастtsconfig.jsonфайл для вас.теперь вы можете использовать обещание в вашем файле typescript
var x: Promise<any>;. Выполнитьtsc -p .для компиляции вашего проекта. У вас не должно быть ошибки.
Вариант № 1
использовать
targetиlibпараметры компилятора для компиляции непосредственно кes5без необходимости установкиes6-shim. (Проверено с помощью TypeScript2.1.4). В разделе lib используйте либоes2016илиes2015.promise.// tsconfig.json { "compilerOptions": { "target": "es5", "lib": [ "es2015.promise", "dom" ] }, "include": [ "src/**/*.ts" ], "exclude": [ "node_modules" ] }Вариант № 2
используйте NPM для установки the
es6-shimС типы организации.npm install @types/es6-shim --save-devАльтернатива #3
Перед Машинописным Текстом 2.0, используйте typings установить
es6-shimС DefinitelyTyped.npm install typings --global --save-dev typings install dt~es6-shim --global --save-devThe
typingsпараметр используетnpmустановитьtypingsво всем мире, а затем используетtypingsдля установки прокладки. Элементdt~префикс означает загрузить прокладку из DefinitelyTyped. Элемент--globalопция означает, что типы прокладок будут доступны на протяжении всего проекта.посмотреть также
https://github.com/Microsoft/TypeScript/issues/7788 - не удается найти имя 'Promise' & не удается найти имя 'require'
начиная с TypeScript 2.0 вы можете включить типизации для собственных обещаний, включив следующее в свой
tsconfig.json"compilerOptions": { "lib": ["es5", "es2015.promise"] }это будет включать объявления promise, которые поставляются с TypeScript без необходимости устанавливать цель на ES6.
Если вы используете узел.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
А. При использовании
"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", не нужно ничего делать.
использование собственных обещаний ES6 с Typescript в Visual Studio 2015 + Node.Яш инструменты 1.2
установка npm не требуется, поскольку обещания ES6 являются родными.
узел.проект Яш -> свойства -> вкладка сборки 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); } );
Я должен был понизить
@types/core-jsдо 9.36, чтобы заставить его работать с"target": "es5"установить в моем tsconfig.
"@types/core-js": "0.9.36",
Comments