如何使用 NestJs 允许可选枚举使用空字符串值?

Dam*_*mon 5 nestjs

我成功验证了我的 dto 的有效枚举类型:

// time-unit.enum.ts

export enum TimeUnit {
  SECONDS = 'SECONDS',
  MINUTES = 'MINUTES',
  HOURS = 'HOURS',
  DAYS = 'DAYS',
}
Run Code Online (Sandbox Code Playgroud)
// create-thing.dto.ts

@ApiPropertyOptional({
    description: 'The lead time unit.',
    example: 'DAYS',
  })
  @IsOptional()
  @IsEnum(TimeUnit)
  unit?: TimeUnit;
Run Code Online (Sandbox Code Playgroud)

在前端,我提供了一个<select>填充有空字符串作为默认值的值,然后是相应的枚举值。

如果我选择一个值,一切都会很好!这是一个可选字段(可为空的列)。因此,如果我尝试保存而不选择某些内容,我会收到 400 错误:

LeadTime.unit 必须是有效的枚举值

如何允许空字符串作为有效的枚举选项?

小智 6

最好的方法是如果该值等于空字符串则对其进行转换 // create-thing.dto.ts

@ApiPropertyOptional({
    description: 'The lead time unit.',
    example: 'DAYS',
  })
  @Transform((params) => (params.value === '' ? null : params.value))
  @IsOptional()
  @IsEnum(TimeUnit)
  unit?: TimeUnit;
Run Code Online (Sandbox Code Playgroud)