扩展 class-transformer 转换函数以转换可选值(如果未定义)

Que*_*n3r 8 typescript typescript-decorator class-transformer

目前我使用该class-transformer包将可选值转换为默认值

@IsString()
@IsOptional()
@Transform((description: string) => description || '')
public description: string;
Run Code Online (Sandbox Code Playgroud)

出现了两个问题。

  • 我必须针对不同类型多次使用此转换逻辑
  • 我想让它可以测试代码覆盖率报告

所以基本上我想创建一个将可选值转换为默认值的函数,我当前的方法是:

function transformValueIfUndefined<TValue>(value: TValue, fallbackValue: TValue): TValue {
  if (value === undefined) {
    return fallbackValue;
  }

  return value;
}
Run Code Online (Sandbox Code Playgroud)

Transform现在我可以在装饰器中使用这个函数

@Transform((description: string) => transformValueIfUndefined(description, ''))
Run Code Online (Sandbox Code Playgroud)

但正如您所看到的,这不值得付出努力。有没有一种方法可以创建我自己的转换装饰器以及class-validator转换class-transformer可选值?

我的自定义装饰器应该是这样的

@TransformOptionalValueIfUndefined('')
Run Code Online (Sandbox Code Playgroud)

Eug*_*e M 20

装饰器只是函数,那么为什么不编写自己的函数呢?像这样的东西应该足够了:

function TransformValueIfUndefined() {
    return Transform((description: string) => description || '')
}
Run Code Online (Sandbox Code Playgroud)
@TransformValueIfUndefined()
public description: string;
Run Code Online (Sandbox Code Playgroud)