gpt4 book ai didi

node.js - 类型 'catch' 上不存在属性 'Promise'

转载 作者:搜寻专家 更新时间:2023-10-30 20:43:42 28 4
gpt4 key购买 nike

我在 typescript 中使用 Mongoose 和 Bluebird。 Mongoose 设置为返回 Bluebird promise ,但我不知道如何“告诉”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 promise。

如何更改 Mongoose 方法的返回类型,以便 TypeScript 知道它正在返回一个 Bluebird promise?

最佳答案

根据 DefinitelyTyped 的 mongoose.d.ts

/**
* To assign your own promise library:
*
* 1. Include this somewhere in your code:
* mongoose.Promise = YOUR_PROMISE;
*
* 2. Include this somewhere in your main .d.ts file:
* type MongoosePromise<T> = YOUR_PROMISE<T>;
*/

因此,您的主要 .d.ts 文件将如下所示:

/// <reference path="globals/bluebird/index.d.ts" />
/// <reference path="globals/mongoose/index.d.ts" />
type MongoosePromise<T> = bluebird.Promise<T>;

关于node.js - 类型 'catch' 上不存在属性 'Promise<void>',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39127714/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com