当前我使用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;