TypeScript 中的 Mongoose post hook 类型错误

Posted

技术标签:

【中文标题】TypeScript 中的 Mongoose post hook 类型错误【英文标题】:Mongoose post hook Type error in TypeScript 【发布时间】:2021-06-28 16:03:17 【问题描述】:

当我在要使用的模型上调用 updateOne() 时,我正在使用猫鼬和打字稿

someSchema.post<Query>('updateOne', function(doc: IsomeDoc) 
    console.log(this)

问题是this 是 Query 类型,如果我抑制打字稿检查器并忽略它,因为它给了我一个错误:

Generic type 'Query&lt;ResultType, DocType, THelpers&gt;' requires between 2 and 3 type arguments.

这是我的架构

const someSchema = new Schema(
  
    _id:  type: String, required: true ,
    status:  type: String ,
  ,
   timestamps: true 
)

如何在函数内获得this 的正确类型?经过大量搜索后,几乎没有使用带有 typescript 和 mongoose 的 post hook。 什么是ResultType?

编辑:

在看到@gregooroo 的回答后,我可以通过将其设为Query&lt;IsomeDoc, IsomeDoc&gt; 来通过查询,但它没有为我提供该对象的正确类型。

【问题讨论】:

【参考方案1】:

对于查询中间件,您需要使用该查询应返回的通用类型构造一个 Query 类型


someSchema.post<Query<IsomeDoc, IsomeDoc>>('updateOne', function(doc) 
    console.log(this)


【讨论】:

虽然它不再给我错误,但当我输入 this._update 时,编译器说它不存在,但如果我使用 @ts-ignore 它会打印出一个属性 哦,我明白了。所以显然“_update”没有暴露在猫鼬类型中。我在网上找到了这个sn-p:pastebin.com/HUgUq0Ka也许它会帮助你@F22lightning 关于这个或在一般情况下使用带有猫鼬的打字稿的文档为零,谢谢! 确实如此。尤其是现在(mongoose >5.11),他们正在处理自己的 TypeScript 定义,所以有几件事可能会有所不同。

以上是关于TypeScript 中的 Mongoose post hook 类型错误的主要内容,如果未能解决你的问题,请参考以下文章

TypeScript 中的 Mongoose post hook 类型错误

Mongoose 的 loadClass() 和 TypeScript

Typescript Mongoose 以类型安全的方式忽略查询结果中的某些字段

Mongoose Schema 类型作为 TypeScript 的自定义接口?

如何在nestjs mongoose typescript中引用嵌套文档

使用`let cached = global.mongoose`时出现Next.js + Typescript + mongoose错误