TypeScript中返回Mongoose deleteMany()结果时遇TS2742错误
TS2742错误原因及解决方法
错误原因
- TypeScript自动推断函数返回类型时,无法正确识别
mongoose.deleteMany()返回的类型——这个类型实际来自mongoose依赖的mongodb包内部(DeleteResult)。由于该类型属于间接依赖的内部类型,而非当前项目直接依赖的公开类型,TypeScript编译器认为这种隐式推断的类型不具备可移植性,因此抛出“无法命名推断类型”的错误,要求必须显式添加类型注解。 - 本质是TypeScript的类型系统对跨依赖包的内部类型推断有严格限制,避免因依赖版本变化导致类型失效。
解决方法
给函数显式指定返回类型即可,mongoose已导出对应的DeleteResult类型,直接导入使用:
import { DeleteResult } from 'mongoose'; async deleteNotCompletedClassworkItemsForExam(examId: string): Promise<DeleteResult> { return this.classworkModel.deleteMany({ examId, completed: { $exists: false }, }); }
如果不需要关注返回结果的具体类型细节,也可以临时使用Promise<any>替代,但不推荐这种做法,明确的类型注解更利于代码维护和类型检查。
内容的提问来源于stack exchange,提问作者Mike M
相关产品推荐
相关产品推荐

