Typegoose中如何为字段设置自定义对象类型并消除Mixed类型提示?
Typegoose中如何为字段设置自定义对象类型并消除Mixed类型提示?
嘿,我之前也碰到过这个问题,折腾了好一会儿才搞明白怎么弄,给你分享几个靠谱的解决办法:
方法一:通过@modelOptions允许Mixed类型并指定字段类型
首先你需要明确给data字段指定类型(比如用自定义接口或者Record<string, any>),然后在你的Schema类上添加@modelOptions装饰器来关闭Mixed类型的提示。具体步骤如下:
- 先导入需要的工具:
import { prop, getModelForClass, modelOptions, Severity } from '@typegoose/typegoose';
- 定义你的Schema类,加上配置:
// 如果你想约束data的结构,可以自定义一个接口 interface CustomItemData { [key: string]: number; // 这里根据你的实际数据结构调整,比如也可以是string、boolean等 } @modelOptions({ schemaOptions: { // 允许Mixed类型,直接消除控制台提示 allowMixed: Severity.ALLOW } }) class ItemSchema { @prop() public name: string; // 给data字段指定类型 @prop() public data: CustomItemData; // 要是不需要约束结构,也可以写成:public data: Record<string, any>; } const ItemModel = getModelForClass(ItemSchema);
这样配置之后,控制台的Mixed类型提示就会消失,同时TypeScript也能正常做类型检查,你给data赋值不同结构的对象(比如data1、data2)也不会有问题。
方法二:直接指定Mongoose的Mixed类型
如果你更倾向于直接用Mongoose原生的类型,也可以显式指定data字段为Schema.Types.Mixed,同样配合allowMixed配置:
import { Schema } from 'mongoose'; import { prop, getModelForClass, modelOptions, Severity } from '@typegoose/typegoose'; @modelOptions({ schemaOptions: { allowMixed: Severity.ALLOW } }) class ItemSchema { @prop() public name: string; @prop({ type: Schema.Types.Mixed }) public data: Record<string, any>; } const ItemModel = getModelForClass(ItemSchema);
小提示
Severity有三个选项:ALLOW(允许并消除提示)、WARN(保留警告)、ERROR(强制报错),根据你的需求选就行。- 如果你之前尝试过
allowMixed但没生效,大概率是没把@modelOptions装饰器加到你的Schema类上,这个是关键哦!
内容来源于stack exchange
相关产品推荐
相关产品推荐

