3

目前我使用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('')
4

1 回答 1

7

装饰器只是函数,为什么不自己写呢?这样的事情就足够了:

function TransformValueIfUndefined() {
    return Transform((description: string) => description || '')
}
@TransformValueIfUndefined()
public description: string;
于 2020-04-21T06:52:47.870 回答