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



Using Mongoose ORM for MongoDB

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

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

然后用它创建一个模型

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

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

let convoData = await ConvoData.randomItem()

我的棉绒不知道ConvoData有猫鼬修补的这种神奇方法。

如何声明这些方法,以便 Linter(TSLint/VSCode 智能感知(可以正确发现这些方法?

我认为

你可以告诉 ESLint "忽略"这样的行,或者你可以变得非常奇怪并做这样的事情:

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

糟糕的是,这两种解决方案都不像我希望的那样优雅。

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

不要使用 ES6 箭头函数 (=>( 声明静态。箭头函数显式阻止绑定此内容,因此上述示例将不起作用,因为它的值。

这可能是你的问题吗?

现在我在大多数项目中都使用打字稿,由于上述一些原因以及更多原因,猫鼬击败了获得体面的智能感,我的解决方案是不使用猫鼬......

如果完全像这样声明:

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

它不起作用,因为该方法未关闭。您应该尝试关闭该方法。此外,该方法究竟返回了什么,这样,我们就可以正确调试该方法。

最新更新