Class-验证器:根据另一个 属性 的值,在验证时删除一个 属性

Class-validator: remove a property on validation, based on the value of another property

class-validator 与 NestJS 结合使用,我可以正常工作:

export class MatchDeclineReason {
  @IsString()
  @IsEnum(MatchDeclineReasonType)
  @ApiProperty()
  type: MatchDeclineReasonType;

  @ValidateIf(reason => reason.type === MatchDeclineReasonType.Other)
  @IsString()
  @ApiProperty()
  freeText: string;
}

所以如果 delinceReason.type === Other,我希望得到一个 freeText 字符串值。


但是,如果 declineReason.typeOther 有任何不同,我希望删除 freeText 属性。

有没有什么方法可以在不编写 CustomValidator 的情况下实现这种行为?

我的ValidationPipe配置:

  app.useGlobalPipes(
    new ValidationPipe({
      disableErrorMessages: false,
      whitelist: true,
      transform: true,
    }),
  );

可以通过自定义值转换逻辑来实现:

  @ValidateIf(reason => reason.type === MatchDeclineReasonType.Other)
  @Transform((params) =>
    (params.obj.type === MatchDeclineReasonType.Other ? params.value : undefined)
  )
  @IsString()
  @ApiProperty()
  freeText: string;