如何解决在Mongoose Schema中用TypeScript interface作字段类型的报错问题
错误原因
TypeScript 的interface是仅在编译阶段生效的类型标识,不会保留到运行时的 JavaScript 代码中。Mongoose Schema 接收的是运行时可用的配置值,你直接将Job这个编译期类型作为值传入数组配置,运行时无法找到对应的Job变量,因此抛出该错误。
修复方案
你需要先定义和Job接口结构匹配的 Mongoose 子 Schema,再将子 Schema 传入jobs字段的配置中,同时可以搭配 TypeScript 泛型保证类型一致性:
- 定义
Job对应的子 Schema
// 原有TS接口,类型注解建议使用小写boolean(对应TS基础类型,大写Boolean为JS构造函数) interface Job { jobid: boolean; title: boolean; } // 结构和Job接口完全匹配的Mongoose子Schema const JobSchema = new Schema<Job>({ jobid: { type: Boolean, required: true }, title: { type: Boolean, required: true } });
- 调整
workerSchema的jobs字段配置
// 可额外定义Worker接口搭配Schema泛型,实现全链路类型校验 interface Worker { _id: string; first_name?: string; jobs: Job[]; } const workerSchema = new Schema<Worker>({ _id: { type: String, required: true }, first_name: { type: String }, jobs: [JobSchema] // 传入子Schema而非TS类型 });
如果不需要复用Job结构,也可以直接把结构写在jobs字段的数组配置中:
const workerSchema = new Schema<Worker>({ _id: { type: String, required: true }, first_name: { type: String }, jobs: [{ jobid: { type: Boolean, required: true }, title: { type: Boolean, required: true } }] });
内容的提问来源于stack exchange,提问作者Yahli Gitzi
相关产品推荐
相关产品推荐

