如何声明可与ESLint一起使用的猫鼬静态方法

时间:2019-04-09 11:12:19

标签: node.js mongoose eslint mongoose-schema

在MongoDB中使用Mongoose ORM

我已经声明了一个猫鼬静态方法,例如:

ConvoDataSchema.statics.randomItem = async function () { ... }

然后使用该模型创建模型

const ConvoData = mongoose.model('ConvoData', ConvoDataSchema)

但是稍后我想调用该方法时:

let convoData = await ConvoData.randomItem()

我的小狮子不知道ConvoData曾被猫鼬修补过这种神奇的方法。

如何声明这些方法,以便Linter(TSLint / VSCode Intellisense)可以正确发现这些方法?

4 个答案:

答案 0 :(得分:0)

如果完全这样声明:

ConvoDataSchema.statics.randomItem = async function () {
const ConvoData = mongoose.model('ConvoData', ConvoDataSchema)

由于该方法未关闭,因此无法使用。您应该尝试关闭该方法。 此外,该方法返回的确切是什么,这样我们就可以正确调试该方法。

答案 1 :(得分:0)

我认为您可以告诉ESLint这样的“忽略”行,或者您会变得很奇怪并执行以下操作:

let convoData = await ConvoDataSchema.statics.randomItem.call(ConvoData)

很遗憾,这两种解决方案都不像我确定的那样优雅。

答案 2 :(得分:0)

查看文档,我发现:https://mongoosejs.com/docs/guide.html#statics

  

请勿使用ES6箭头函数(=>)声明静态变量。箭头函数明确阻止绑定 this ,因此,由于 this 的值,上述示例将不起作用。“

这是你的问题吗?

答案 3 :(得分:0)

现在,我在大多数项目中都使用打字稿,由于上述原因以及更多原因,猫鼬无法获得不错的智能感知,我的解决方案是不使用猫鼬...