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.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;
将 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;