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

Mongoose从5升级到6后调用mongoose.Types.ObjectId()报TypeScript类型错误

问题背景

我近期对项目依赖做了版本升级,相关依赖版本变动如下:

  • mongodb:从3.5.4升级到4.1.4
  • mongoose:从5.12.10升级到6.0.12
    项目开发环境依赖为:typescript 4.4.4、ts-node 10.4.0
问题描述

升级后执行mongoose.Types.ObjectId()代码时出现如下TypeScript类型错误:

Value of type 'typeof ObjectId' is not callable. Did you mean to include 'new'?

已执行的排查操作:

  1. 已完全卸载项目内及全局安装的@types/mongoose依赖,mongoose 6.x版本已自带内置类型声明,无需额外安装类型包
  2. 该问题虽被Mongoose官方标记为已修复的Bug,但实际运行仍可复现
  3. 尝试使用new mongoose.Types.ObjectId()方式规避类型报错,会引发其他运行时异常,无法作为最终解决方案
可行解决方案

方案1:替换为官方推荐API(推荐)

使用内置的createFromHexString方法生成ObjectId,完全兼容类型声明且无运行时问题:

// 从16进制字符串转换为ObjectId
const existingId = mongoose.Types.ObjectId.createFromHexString(hexString)

如你需要生成全新的ObjectId,可先排查new关键字触发运行时异常的根因(大概率是入参格式不合法导致),修复后即可正常使用new mongoose.Types.ObjectId()生成新ID。

方案2:临时类型断言(适合旧代码兼容场景)

无需修改原有调用逻辑,仅添加类型断言即可消除类型报错:

const id = (mongoose.Types.ObjectId as unknown as () => mongoose.Types.ObjectId)()

方案3:升级Mongoose到修复版本

mongoose 6.2.0及以上稳定版本已彻底修复该类型声明缺陷,直接升级到对应版本即可从根源解决问题。


内容的提问来源于stack exchange,提问作者user2620132

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:54:09