NestJS集成Typegoose数组属性报错Cannot read property 'prototype'如何解决
修复方案
问题原因
该报错由@typegoose/typegoose@8.x版本的嵌套数组类型声明语法不规范导致,你当前使用的@prop({type: () => [TopPageAdvantage]})写法不符合8.x版本的类型定义规则,typegoose解析数组类型时无法正确获取到TopPageAdvantage的类原型,因此触发Cannot read property 'prototype' of undefined错误。
修复步骤
直接修改TopPageModel中advantages字段的装饰器配置即可:
// 修改前 @prop({type: () => [TopPageAdvantage]}) advantages:TopPageAdvantage[]; // 修改后 @prop({ type: () => TopPageAdvantage, _id: false }) advantages: TopPageAdvantage[];
补充说明:
_id: false是可选配置,用于关闭嵌套子文档自动生成_id字段的默认行为,如果你需要为每个优势项生成唯一id可以删除该配置- 如果你没有循环引用的场景,也可以简化写为:
@prop({ type: TopPageAdvantage, _id: false }) advantages: TopPageAdvantage[];
额外优化建议
你当前代码中tags字段的声明也可以同步调整为符合8.x版本规范的写法,避免后续出现同类报错:
// 修改前 @prop({type: () => [String]}) tags:string[]; // 修改后 @prop({ type: () => String }) tags: string[];
验证
修改完成后重新启动项目即可正常运行,数组字段的增删改查操作均不受影响。
内容的提问来源于stack exchange,提问作者Epoch Sonder
相关产品推荐
相关产品推荐

