猫鼬文档类型声明

Mongoose document type declaration

我知道这可能太基础了,但我不记得如何正确地做到这一点。我想声明一个 Mongoose 文档以使用 VS Code IntelliSense 检索数据。

现在,document 声明为 any,因为 findById() returns any:

const document = await MyModel.findById(docId);

所以,每当我想调用类似 document.updateOne() 的东西时,我都没有打开智能感知。

我试过使用类似的东西:

import { Model, Document } from 'mongoose';
...
const document: Model<Document> = await MyModel.findById(docId);

但这并没有让我能够直接引用内部属性,例如 document.title 或任何其他属性。

那么,声明document的正确方法是什么?

您的 MyModel 具有某种文档类型,其中 extends 猫鼬 Document 类型和添加可能添加了它自己的一些属性。这就是您要使用的泛型。

您不想在检索文档时设置泛型 (<Document>),而是希望在 MyModel 对象本身上设置泛型,以便 typescript 为 [=17] 推断出正确的类型=] 和任何其他方法。所以你想在你创建 MyModel.

的地方处理这个
interface MyDocument extends Document {
    title: string;
}

const MyModel = mongoose.model<MyDocument>(name, schema);

现在 document 在此处被推断为 MyDocument | null 类型:

const document = await MyModel.findById(docId);