Объявить тип PromiseConstructorLike, новый Promise в TypeScript
Я редактирую файлы TypeScript, и Promise
не найден компилятором TypeScript или в коде Visual Studio. Вместо PromiseConstructorLike, PromiseLike<T>
находятся как показано в lib.d.ts или lib.es6.d.ts ниже.
declare type PromiseConstructorLike = new <T>(executor: (resolve: (value?: T | PromiseLike<T>) => void, reject: (reason?: any) => void)
=> void) => PromiseLike<T>;
interface PromiseLike<T> {
/**
* Attaches callbacks for the resolution and/or rejection of the Promise.
* @param onfulfilled The callback to execute when the Promise is resolved.
* @param onrejected The callback to execute when the Promise is rejected.
* @returns A Promise for the completion of which ever callback is executed.
*/
then<TResult>(onfulfilled?: (value: T) => TResult | PromiseLike<TResult>, onrejected?: (reason: any) => TResult | PromiseLike<TResult>): PromiseLike<TResult>;
then<TResult>(onfulfilled?: (value: T) => TResult | PromiseLike<TResult>,
Я попытался разместить следующее в моем файле TypeScript
var Promise : PromiseConstructorLike;
...
new Promise(function (resolve, reject) {
...
return value;
}).then(value => {
...
});
который компилируется, однако я получаю ошибку во время выполнения
TypeError: Promise is not a constructor
Какой правильный синтаксис или код для выполнения new Promise(
как показано выше?
3 ответа
Решение
Поскольку кодек скомпилирован, это не похоже на проблему с объявлениями типов. Вы должны сделать свой Promise доступным во время выполнения JS. Это может быть достигнуто с помощью обещания polyfill.
С одной дополнительной линией
declare var Promise : PromiseConstructorLike;
Вы можете использовать Обещания в Typescript следующим образом:
let myPromise= new Promise((resolve,reject) =>{...});