【发布时间】:2016-12-31 20:22:29
【问题描述】:
我正在使用 Mongoose 和 Bluebird 和 typescript。 Mongoose 设置为返回 Bluebird 承诺,但我不知道如何“告诉”TypeScript。
例如,如果我尝试执行以下操作,我有一个 Message Mongoose 模型:
new Message(messageContent)
.save()
.then(() => {...})
.catch(next);
TypeScript 抱怨 Property 'catch' does not exist on type 'Promise<void>'. 因为它认为 .save()(或任何其他返回 Promise 的 Mongoose 方法)返回一个“常规”Promise(它确实没有 .catch() 方法)而不是 Bluebird 承诺.
如何更改 Mongoose 方法的返回类型,以便 TypeScript 知道它正在返回 Bluebird 承诺?
【问题讨论】:
-
看起来有一个Mongoose的DefinitelyTyped文件以及它的Promise扩展名mongoose.d.ts。您是否引用了这些文件?
-
@Igor 是的,但是我不想使用 Mongoose 默认拥有的 Promise,我将其替换为 Bluebird。 (通过
mongoose.Promise = require('bluebird')) -
好的,那么引用DefinitelyTyped/bluebird/bluebird.d.ts 并在
save()结果上使用强制转换呢? -
即使是“常规”承诺也有一个
catch方法。只有 Mongoose 的承诺没有。
标签: node.js typescript mongoose promise bluebird