我有一个使用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。
答案 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编译器造成严重破坏