@IsEnum 无法将 undefined 或 null 转换为对象

问题描述 投票:0回答:1

尝试在以下代码中应用 IsEnum 类验证器时:

export class UpdateEvaluationModelForReportChanges {
  @IsNotEmpty()
  @IsEnum(ReportOperationEnum)    // FIRST
  operation: ReportOperationEnum;

  @IsNotEmpty()
  @IsEnum(EvaluationStatusEnum).  // SECOND
  status: EvaluationStatusEnum;
  // ...
}

我在第二个 IsEnum 装饰器中遇到此错误:

../node_modules/src/decorator/typechecker/IsEnum.ts:18
  return Object.entries(entity)
                ^
TypeError: Cannot convert undefined or null to object

第一个枚举

ReportOperationEnum
是在与类相同的文件中定义的。这是它的定义:

// ...
export enum ReportOperationEnum {
  COMPLETED = "COMPLETED",
  REVIEWED = "REVIEWED",
  RETURNED = "RETURNED",
}
// ...

第二个枚举

EvaluationStatusEnum
位于单独的文件中:

// ...
export enum EvaluationStatusEnum {
  CANCELED = 'CANCELED',
  SCHEDULED = 'SCHEDULED',
  FINISHED = 'FINISHED',
}
// ...

虽然将第二个枚举复制到包含第一个枚举的文件中可以解决问题,但我不喜欢从其原始位置复制或重新定位第二个枚举。 以防万一,这两个枚举都是包含其他枚举和类的文件的一部分。 是否有任何潜在原因或相关因素可能导致此问题?

typescript enums nestjs class-validator
1个回答
0
投票

我解决了这个问题。它似乎与第二个枚举

EvaluationStatusEnum
的位置有关,该位置位于导出架构的文件中:

export enum EvaluationStatusEnum {
    // ...
}
@Schema()
export class Evaluation extends BaseModel implements EvaluationModel {
    // ...
}
export const EvaluationSchema = SchemaFactory.createForClass(Evaluation);

因此,通过将枚举移至第三个文件(我现在将专门为枚举保留该文件),错误就消失了。

© www.soinside.com 2019 - 2024. All rights reserved.