使用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.type
与Other
有任何不同,我希望去掉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;