当我在Promise构造函数的TypeScript声明中发现一个奇怪的行为时,我正在回答this question:
import * as Bluebird from 'bluebird'
interface PromiseConstructor {
new <R>(callback: (resolve: (thenableOrResult?: R | PromiseLike<R>) => void, reject: (error?: any) => void, onCancel?: (callback: () => void) => void) => void): Bluebird<R>;
}
declare var Promise: PromiseConstructor;
// This works:
const x: PromiseLike<any> = new Promise<any>((a,b) => void 0);
// This does not work:
import('jquery').then($ => {
console.log($.fn.jquery)
});
// This doesn't work either:
async function test() {
return "";
}
正如你所看到的,我声明了构造函数,它允许我构建一个promise,并且它不会归咎于不属于PromiseLike类型。但我不能使用异步函数或延迟导入。编译器Version 2.5.0-dev.20170629
将此消息归咎于两次:
test.ts(13,1):错误TS2712:ES5 / ES3中的动态导入调用需要'Promise'构造函数。确保你有一个'Promise'构造函数的声明,或者在你的--lib选项中包含'ES2015'。
我该如何声明PromiseConstructor?