打字稿 - 为什么mongoose中不存在`methods`属性?

时间:2016-02-13 18:58:38

标签: javascript node.js mongoose typescript definition

我正在编写nodejs中的typescript。当我编写mongoose模式时,Typescript编译器通知我如下:

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

我感到很奇怪。我在guideInstance methods部分引用了doc。它提到如下:

// 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。但对于打字稿,这是错误的。

接下来,我查找定义。我发现method(name: string, fn: Function)method(method: Object)这些属性但它没有methods

简而言之,你没有回答我为什么mongoose定义的作者没有定义属性。我需要答案methods mongoose实际可用或不可用吗?

3 个答案:

答案 0 :(得分:1)

没有这样的属性和#34;方法"在纯JavaScript中。它是猫鼬的细节。请注意,node.js在内部使用与Chrome浏览器相同的谷歌V8 javascript引擎 - 因此没有像node.js那样的纯javascript。

答案 1 :(得分:0)

mongoose中确实存在

methods属性,但是使用mongoose方法/静态类似于打字稿中的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);
})

答案 2 :(得分:0)

今天,猫鼬已经发布了猫鼬5.11.0的新版本。如果在package.json中有“猫鼬”:“ ^ 5.x.xx”,您将收到很多类似的错误。因此,我建议更改“猫鼬”:“〜5.x.xx”以修复所有问题。