我正在mongoose中编写接口和模式,但得到了一些类型脚本错误:
import { Schema, Types } from 'mongoose';
interface Foo {
_id: Types.ObjectId,
bar: Types.ObjectId,
}
const FooSchema = new Schema<Foo>({
_id: { type: Types.ObjectId },
bar: { type: Types.ObjectId },
});
属性_id
和bar
在此代码中都有键入错误:
Type '{ type: typeof Types.ObjectId; }' is not assignable to type 'SchemaDefinitionProperty | undefined'.
Types of property 'type' are incompatible.
Type 'typeof ObjectId' is not assignable to type 'typeof Mixed | ObjectIdSchemaDefinition | undefined'.
Type 'typeof ObjectId' is missing the following properties from type 'typeof Mixed': schemaName, cast, checkRequired, set, get
Mongoose版本是6.5.4(目前可用的最新版本)
我也不知道为什么,这不是我第一次写mongoose模式,但是从来没有遇到过这样的问题。
我已经确认,我可以重现这个错误从干净的新项目。(意味着没有其他背景原因)
1条答案
按热度按时间von4xj4u1#
在这里,尝试像这样更改模式类型定义:
说明:
根据Mongoose文档,SchemaType与常规类型不同。换句话说,
mongoose.ObjectId !== mongoose.Types.ObjectId
。即SchemaTypemongoose.Schema.Types.ObjectId
是Mongoose使用的特殊定义。常规类型定义Types.ObjectId
可用于创建接口,但在创建模式时必须使用SchemaType。这有点令人困惑。就像SchemaTypeString
必须在Schema中使用,而不是在Interface中使用string
,即使两者在技术上都是类型定义。希望这能有所帮助!