【问题标题】:Typescript - Why `methods` property doesn't exist in mongoose?打字稿-为什么猫鼬中不存在`methods`属性?
【发布时间】:2016-05-24 20:49:21
【问题描述】:

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

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

我觉得很奇怪。我在guideInstance 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。但是对于打字稿,这是错误的。

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


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

【问题讨论】:

    标签: javascript node.js mongoose typescript definition


    【解决方案1】:

    不,纯javascript中没有“方法”这样的属性。它是猫鼬的特性。请注意,node.js 在内部使用与 chrome 浏览器相同的 google V8 javascript 引擎 - 所以对于 node.js,没有纯 javascript 之类的东西。

    【讨论】:

      【解决方案2】:

      methods 属性确实存在于 mongoose 中,但是在 typescript 中使用 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);
      })
      

      【讨论】:

      • 这行不通。此外,没有解释为什么发布这个答案。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2021-02-12
        • 2018-11-29
        • 2016-02-05
        • 2020-05-11
        • 2021-07-16
        • 2019-07-12
        • 2021-09-10
        • 2016-04-01
        • 1970-01-01
        相关资源
        最近更新 更多