猫鼬文档类型声明
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);
我知道这可能太基础了,但我不记得如何正确地做到这一点。我想声明一个 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);