Я полный новичок в Typescript, и мне интересно, можно ли использовать обещания ES6 в Typescript и что мне нужно сделать, чтобы они заработали. Я использую узел 0.11.14 и во время компиляции получаю сообщение об ошибке «Не могу найти имя 'Promise'»
javascript
typescript
es6-promise
dchang
источник
источник
es6-promise
Ответы:
В текущем lib.d.ts нет определенных обещаний, поэтому вам нужен дополнительный файл определения для него, поэтому вы получаете ошибки компиляции.
Вы можете, например, использовать (как говорит @elclanrs) использовать пакет es6-prom с файлом определения из ОпределенноТипед: определение es6-обещания
Затем вы можете использовать его так:
edit Вы можете использовать его без определения при нацеливании на ES6 (с компилятором TypeScript). Обратите внимание, что вам по-прежнему требуется, чтобы Promise существовал во время выполнения, конечно (поэтому он не будет работать в старых браузерах :)). Добавьте / отредактируйте следующее в свой
tsconfig.json
: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
, поскольку библиотека используется только во время компиляции.Альтернатива # 1
Используйте параметры компилятора
target
иlib
для прямой компиляцииes5
без необходимости установкиes6-shim
. (Протестировано с помощью TypeScript2.1.4
). В разделе lib используйте либоes2016
илиes2015.promise
.Альтернатива # 2
Используйте НПМ для установки
es6-shim
из типов организации .Альтернатива # 3
До TypeScript 2.0 используйте типизацию, чтобы установить
es6-shim
глобально из Определенного Типа .Параметр
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
Это будет включать объявления обещаний, которые идут с TypeScript, без необходимости устанавливать цель на ES6.
источник
Если вы используете node.js 0.12 или выше / typescript 1.4 или выше, просто добавьте параметры компилятора, например:
Дополнительная информация: https://github.com/Microsoft/TypeScript/wiki/Compiler-Options
Если пользуетесь
tsconfig.json
, то вот так:Дополнительная информация: https://github.com/Microsoft/TypeScript/wiki/tsconfig.json
источник
Это самый последний способ сделать это, приведенный выше ответ устарел:
typings install --global es6-promise
источник
Использование собственных обещаний ES6 с Typescript в Visual Studio 2015 + инструменты Node.js 1.2
Установка npm не требуется, поскольку ES6 Promises является родным.
Проект Node.js -> Свойства -> вкладка Typescript Build Версия ECMAScript = ECMAScript6
источник
A. При использовании
"target": "es5"
TypeScript версии ниже 2.0:Б. При использовании
"target": "es5"
TypeScript версии 2.0 или выше:C. При использовании
"target": "es6"
ничего делать не нужно.источник
"target": "es6"
TypeScript 2.1.1 и все еще получаюCannot find name 'Promise'
.Мне пришлось перейти
@types/core-js
на 9.36, чтобы заставить его работать с"target": "es5"
настройками в моем tsconfig."@types/core-js": "0.9.36",
источник