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

使用SWC编译NestJS+MongoDB时枚举Schema配置报错

NestJS + MongoDB 使用SWC编译时枚举类型Schema报错问题

问题现象

使用SWC编译器编译NestJS结合MongoDB的项目时,出现Schema配置错误,不使用SWC编译则一切正常。

报错信息

TypeError: Invalid schema configuration: admin is not a valid type at path ADMIN.

代码示例

枚举定义

export enum Role {
  ADMIN = 'admin',
  SALES = 'sales',
  MARKETING = 'marketing',
}

User Schema代码

import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';
import { Role } from '../../../enum/role';

@Schema({ timestamps: true })
export class User {
  @Prop({ required: true, default: null })
  email: string;

  @Prop({ required: true, default: null })
  password: string;

  @Prop({ required: true, enum: Role, default: Role.ADMIN })
  role: Role;
}

export const UserSchema = SchemaFactory.createForClass(User);
export type UserDocument = User & Document;

临时规避方式

将role的类型从Role改为string后,报错即可消失:

@Prop({ required: true, enum: Role, default: Role.ADMIN })
role: string;

额外现象

报错信息会显示枚举第一个元素的值,例如将SALES移至枚举首位时,报错内容变为sales。

SWC配置

通过npm i --save-dev @swc/cli @swc/core安装SWC,nest-cli.json配置如下:

{
  "$schema": "https://json.schemastore.org/nest-cli",
  "collection": "@nestjs/schematics",
  "sourceRoot": "src",
  "compilerOptions": {
    "deleteOutDir": true,
    "builder": "swc",
    "typeCheck": true
  }
}

解决方案

原因分析

SWC对TypeScript字符串枚举的编译逻辑与tsc不同,SWC编译后的枚举对象结构无法被NestJS的SchemaFactory正确识别,导致将枚举值误判为字段类型。

解决方法1:显式传入枚举值数组

在@Prop装饰器中,将enum参数改为枚举的取值数组,而非直接传递枚举对象:

@Prop({ 
  required: true, 
  enum: Object.values(Role), 
  default: Role.ADMIN 
})
role: Role;

解决方法2:调整SWC枚举编译配置

在项目根目录创建.swcrc文件,配置SWC以保留与tsc一致的枚举编译结构:

{
  "jsc": {
    "transform": {
      "legacyDecorator": true,
      "decoratorMetadata": true
    },
    "parser": {
      "syntax": "typescript",
      "decorators": true
    },
    "target": "es2021",
    "enum": {
      "preserveConstEnums": true,
      "enumRuntime": true
    }
  }
}

该配置会让SWC编译枚举时保留原始的键值对结构,确保SchemaFactory能正确解析枚举类型。

内容的提问来源于stack exchange,提问作者M Nouman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 22:57:42