Mongoose6创建Schema时ObjectId仅为类型不可用作值的TS报错如何解决
Mongoose TypeScript 定义ObjectId字段报错解决方案
错误原因
你混淆了TypeScript类型定义和Mongoose Schema字段配置需要使用的实际值:
- 从
mongoose直接导入的ObjectId是仅用于TypeScript类型注解的类型,不能作为Schema配置中type字段的取值,所以触发ts(2693)报错 mongoose.Types.ObjectId是用于生成ObjectId实例的构造函数,不属于Schema支持的字段类型构造器,所以触发ts(2322)报错
解决方案
Schema字段配置的type需要使用Schema.Types.ObjectId,接口的类型注解使用Types.ObjectId即可。
修正后完整代码
import { Schema, Types } from 'mongoose' interface IArticle { title: string userId: Types.ObjectId // 类型注解用Types下的ObjectId类型 thumb: string slug: string children: object[] claps: number } const articleSchema = new Schema<IArticle>({ // 其他字段省略 userId: { type: Schema.Types.ObjectId, // Schema配置用Schema.Types下的ObjectId构造器 required: true }, // 其他字段省略 })
可选简化方案
也可以直接用字符串形式指定字段类型,效果完全一致:
userId: { type: 'ObjectId', required: true }
内容的提问来源于stack exchange,提问作者reharis
相关产品推荐
相关产品推荐

