扩展 class-transformer 转换函数以转换未定义的可选值
extend class-transformer Transform function to transform optional values if undefined
目前我使用 class-transformer
包将可选值转换为默认值
@IsString()
@IsOptional()
@Transform((description: string) => description || '')
public description: string;
然后出现两个问题。
- 我必须针对不同类型多次使用此转换逻辑
- 我想让它可以针对代码覆盖率报告进行测试
所以基本上我想创建一个将可选值转换为默认值的函数,我目前的方法是:
function transformValueIfUndefined<TValue>(value: TValue, fallbackValue: TValue): TValue {
if (value === undefined) {
return fallbackValue;
}
return value;
}
现在我可以在 Transform
装饰器中使用这个函数了
@Transform((description: string) => transformValueIfUndefined(description, ''))
但如您所见,这样做并不值得。有没有一种方法可以创建我自己的转换装饰器以及 class-validator
和 class-transformer
来转换可选值?
我的自定义装饰器应该如下所示
@TransformOptionalValueIfUndefined('')
装饰器只是函数,为什么不自己写呢?这样的东西应该足够了:
function TransformValueIfUndefined() {
return Transform((description: string) => description || '')
}
@TransformValueIfUndefined()
public description: string;
目前我使用 class-transformer
包将可选值转换为默认值
@IsString()
@IsOptional()
@Transform((description: string) => description || '')
public description: string;
然后出现两个问题。
- 我必须针对不同类型多次使用此转换逻辑
- 我想让它可以针对代码覆盖率报告进行测试
所以基本上我想创建一个将可选值转换为默认值的函数,我目前的方法是:
function transformValueIfUndefined<TValue>(value: TValue, fallbackValue: TValue): TValue {
if (value === undefined) {
return fallbackValue;
}
return value;
}
现在我可以在 Transform
装饰器中使用这个函数了
@Transform((description: string) => transformValueIfUndefined(description, ''))
但如您所见,这样做并不值得。有没有一种方法可以创建我自己的转换装饰器以及 class-validator
和 class-transformer
来转换可选值?
我的自定义装饰器应该如下所示
@TransformOptionalValueIfUndefined('')
装饰器只是函数,为什么不自己写呢?这样的东西应该足够了:
function TransformValueIfUndefined() {
return Transform((description: string) => description || '')
}
@TransformValueIfUndefined()
public description: string;