You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mongoose6创建Schema时ObjectId仅为类型不可用作值的TS报错如何解决

Mongoose TypeScript 定义ObjectId字段报错解决方案

错误原因

你混淆了TypeScript类型定义和Mongoose Schema字段配置需要使用的实际值:

  1. 从mongoose直接导入的ObjectId是仅用于TypeScript类型注解的类型,不能作为Schema配置中type字段的取值,所以触发ts(2693)报错
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 01:24:03