繁体   English   中英

具有typeorm和class-validator的NestJS实体中的DRY原理

[英]DRY principles in NestJS entities with typeorm and class-validator

有没有办法把这个代码

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

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

变成类似这个的东西

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

我知道需要装饰器,但是当每个属性必须声明属性类型三次或更多时,SSOT似乎丢失了。

有没有更简单的方法可以解决此问题? JOI? 模式生成?

如果您发现自己一遍又一遍地在属性上使用同一组Decorator,则可以创建一个将它们组合在一起的新Decorator。

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

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

您可以提出一些涵盖您常用用例的方法,也可以考虑将其转换成Decorator Factory,该Decorator Factory可以接受config对象,并可以选择基于参数应用装饰器。

我认为,与装饰器进行一点重复比使用JOI之类的方法更可取,因为您仍然必须明确声明所有规则,但要与实际模型分开,以允许多个事实来源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM