(我已阅读this post,但它是从八月开始,它没有回答我当前打字稿版本的问题。)
我目前在我的项目中使用Typescript 1.8,这很好用:
import * as Promise from "bluebird";
async function f() : Promise<void> {
return Promise.delay(200);
}
但如果我尝试使用Typescript 2.1进行编译:
index.ts(2,16): error TS1059: Return expression in async function does not have a valid callable 'then' member.
在Typscript中搜索使用Bluebird Promises的问题,我也发现了许多github讨论,评论和PR,但它们都很难掌握,在讨论有趣的观点时,我无法找到说明如何我现在应该让它上班。
那么,我怎么能在Typescript 2.1中使用Bluebird for Promises?
答案 0 :(得分:5)
请考虑使用@types/bluebird-global
,如下所示。
npm install --save-dev @types/bluebird-global
在主入口点导入一次。
// The same Promise API, everywhere.
import * as Promise from 'bluebird'
global.Promise = Promise
有关更多背景信息,请参阅DefinitelyTyped issue #11027。
答案 1 :(得分:2)
我在这里问了同样的问题:https://github.com/Microsoft/TypeScript/issues/8331
最后,我自己的答案有效。以下是如何在没有额外.d.ts
文件的情况下在TypeScript 2.3中使用它:
import * as Bluebird from 'bluebird';
export interface DummyConstructor extends Bluebird<any> {
new<T>(): Bluebird<T>;
}
declare global {
interface Promise<T> extends Bluebird<T> {
then(...args: any[]): any;
catch(...args: any[]): any;
}
interface PromiseConstructor extends DummyConstructor {}
var Promise: Promise<any>;
}
Promise = Bluebird as any;
async function test() {
console.log('PING');
await Promise.delay(1000);
console.log('PONG');
}
test();
在定位原生ES7时,它很可怕并且在将来不会工作,因为将来async
/ await
根本不会返回Bluebird的承诺而且没有任何回报可以做到这一点。但是,在此之前和转换到ES5时,这将继续有效。
尽管存在多种any
类型,但它似乎有点类型安全。我确信它可以改进。
答案 2 :(得分:-5)
总体概述,请看一下 SO documentation page 例如。对于蓝鸟,你可以只打字安装蓝鸟。这段代码对我很好:
import Promise = require('bluebird')
Promise.resolve("foo").then(function (msg) {
console.log(msg)
})
&#13;