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

Typegoose中如何为字段设置自定义对象类型并消除Mixed类型提示?

Typegoose中如何为字段设置自定义对象类型并消除Mixed类型提示?

嘿,我之前也碰到过这个问题,折腾了好一会儿才搞明白怎么弄,给你分享几个靠谱的解决办法:

方法一:通过@modelOptions允许Mixed类型并指定字段类型

首先你需要明确给data字段指定类型(比如用自定义接口或者Record<string, any>),然后在你的Schema类上添加@modelOptions装饰器来关闭Mixed类型的提示。具体步骤如下:

  1. 先导入需要的工具:
import { prop, getModelForClass, modelOptions, Severity } from '@typegoose/typegoose';
  1. 定义你的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 03:08:28