Машинопись декоратор бардак - PullRequest
1 голос
/ 01 октября 2019

Есть ли способ решить проблему массового использования декоратора внутри классов?

Вот пример свойства single класса в моем приложении NestJS с неполной документацией о чванстве. декоратор:

  @ApiModelProperty({
    description: 'description',
  })
  @Expose()
  @MaxLength(100, { message: 'message' })
  @IsString({ message: 'message' })
  @ValidateIf(address=> address.id !== null)
  @NotEquals(undefined, { message: 'message' })
  address: string;

Это становится огромным и безобразным в кратчайшие сроки. Может быть, есть какой-нибудь способ сделать код чище, определив декораторы в другом файле?

1 Ответ

7 голосов
/ 02 октября 2019

Декораторы - это обычные машинописные функции. Вы можете попытаться объединить несколько декораторов в один. Например, вы можете смешать проверочные в один декоратор, например:

function apiStringField(maxLength: number, message: string, description?: string) {
  return function(target: any, propertyKey: string, descriptor: PropertyDescriptor) { 
      ApiModelProperty()(target, propertyKey, descriptor)
      Expose()(target, propertyKey, descriptor)
      MaxLength(maxLength, { message })(target, propertyKey, descriptor) 
      IsString({ message })(target, propertyKey, descriptor)
      NotEquals(undefined, { message })(target, propertyKey, descriptor) 
  }
}

И использовать его следующим образом (после импорта):

@apiStringField(100, 'message', 'description')
address: string;
...