Принципы DRY в сущностях NestJS с помощью typeorm и class-validator - PullRequest
0 голосов
/ 03 февраля 2019

Есть ли способ превратить этот код

export class person {
  @IsString()
  @Column('text')
  name: string

  @IsOptional()
  @IsString()
  @Column('text')
  description?: string
}

во что-то, похожее на это

export class person {
  name: string
  description?: string
}

Я знаю, что декораторы необходимы, но SSOT кажется потерянным, когда тип свойствадолжно быть объявлено три или более раз для каждого свойства.

Есть ли более простой способ обойти это?JOI?Схема генерации?

1 Ответ

0 голосов
/ 03 февраля 2019

Если вы снова и снова используете один и тот же набор декораторов в свойствах, вы можете создать новый декоратор, который просто объединяет их вместе.

const CombinedDecorator = (target, property, descriptor) => {
   IsOptional(target, property, descriptor);
   IsString(target, property, descriptor);
   Column('text')(target, property, descriptor);
}

class Person {
   @CombinedDecorator()
   name: string;
}

Вы можете придумать несколько таких, которыеОхватите ваши обычные случаи использования или рассмотрите возможность превращения их в Декораторскую фабрику, которая принимает объект конфигурации и при необходимости применяет декораторы на основе параметров.

Я думаю, что даже небольшое повторение с декораторами гораздо предпочтительнее использованиячто-то вроде JOI, так как вам все равно придется явно указывать все правила, но в месте, отличном от ваших реальных моделей, которое допускает множество источников правды.

...