TypeScript承诺构造函数声明

时间:2017-07-18 15:49:14

标签: typescript promise bluebird

当我在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?

0 个答案:

没有答案