使用Bluebird的ES6 Promise的TypeScript覆盖

时间:2016-04-12 19:32:17

标签: typescript bluebird

我有一个使用promises的Node.js库,其TypeScript声明使用ES6 Promise,即使库本身可以自定义使用任何promise库。

所以,我可以将Bluebird传递到该库中,以便它可以使用它。

问题是如何使Bluebird promise接口在声明级别上可见,因为我的库仅通过ES6 Promise声明其接口。

有没有办法让编译器意识到我正在使用不同的Promise协议,而不必修改库本身?

后者当然是捕获,因为毫无疑问我是否可以修改库。

如果了解那个库是什么有什么帮助的话,让我们从中获取这个简单的界面:

interface Protocol {
    methodName(param1:string, param2:number):Promise<Object[]>
}

然后将其大小乘以1000倍。

所以,我不能用自己的文件伪造协议。我需要弄清楚如何告诉编译器Promise不是默认的ES6,而是Bluebird TypeScript提供的ES6。

1 个答案:

答案 0 :(得分:0)

您可以使用联合https://www.typescriptlang.org/docs/handbook/advanced-types.html#union-types

覆盖Promise类型

这是非首选方式

import Bluebird from 'bluebird';

type Promise = Promise | Bluebird;

根据@Paarth上面的评论,您可以将您的蓝鸟承诺强制转换为ES6承诺。

这是首选方式

鉴于第三方图书馆为:

interface Protocol {
    methodName(param1:string, param2:number):Promise<Object[]>
}

你可以这样消费它:

import Bluebird from 'bluebird';

class Http implements Protocol {
  methodName(url: string, payload: number): Promise<Object[]> {
    return <Promise<Object[]>>new Bluebird((resolve, reject) => {

      // Do whatever you need to do ... use the url & payload

      resolve([{ data: 'Done' }]);
    });
  }
}


let http = new Http();

http.methodName('//get-some-data', 10);

免责声明:我没有编译它来测试它 - 我目前没有设置环境而且jsbin正在对Typescript编译器造成严重破坏