打字稿 - 为什么猫鼬中不存在“方法”属性

Typescript - Why `methods` property doesn't exist in mongoose?

本文关键字:不存在 方法 属性 为什么      更新时间:2023-09-26

我在nodejs中编码打字稿。当我编写猫鼬模式时,Typescript 编译器告诉我如下:

app/models/user.schema.ts(15,12): error TS2339: Property 'methods' does not exis
t on type 'Schema'.

我觉得很奇怪。我在指南的Instance methods部分中参考了文档。它提到如下:

// assign a function to the "methods" object of our animalSchema
animalSchema.methods.findSimilarTypes = function (cb) {
  return this.model('Animal').find({ type: this.type }, cb);
}

我认为methods是一个可用的属性或 API。但是对于打字稿,这是错误的。

接下来,我查找定义。我找到了方法(名称:字符串,fn:函数(和方法(方法:对象(这些属性,但它没有methods


简而言之,你没有回答我为什么猫鼬定义的作者没有定义属性。我需要mongoose中的methods是否真的可用的答案?

不,在纯 JavaScript 中没有"方法"这样的属性。它是猫鼬的细节。请注意,node.js内部使用与chrome浏览器相同的google V8 javascript引擎 - 因此node.js没有纯javascript这样的东西。

methods属性确实存在于猫鼬中,但是像打字稿中的javascript那样使用猫鼬方法/静态会导致错误。以下是一些解决方法。

解决方法 A:

userSchema['methods'].findSimilarTypes = function (cb) {
  return this.model('Animal').find({ type: this.type }, cb);
}

解决方法 B:

userSchema.method('findSimilarTypes', function (cb) {
  return this.model('Animal').find({ type: this.type }, cb);
})

今天猫鼬发布了新版本的猫鼬5.11.0。如果你在package.json中有"mongoose":"^5.x.xx",你会得到很多这样的错误。因此,我建议更改"猫鼬":"~5.x.xx"以修复它们。