如何忽略TypeScript装饰器(使用像通常类型的NestJS实体)?

时间:2019-04-03 10:20:31

标签: javascript node.js typescript decorator nestjs

我想知道是否可以忽略TypeScript装饰器,并在没有装饰器的情况下重用同一文件。在NestJS中,我正在定义这样的实体。

import { PrimaryGeneratedColumn, Column, Entity } from 'typeorm';

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({ length: 100 })
  name: string;

  @Column({ length: 320 })
  email: string;
}

但是除了数据库typeorm配置之外的所有地方,我都需要完全相同的类型,只是没有修饰符。

export class User {
  id: number;
  name: string;
  email: string;
}

重新定义类型会使代码容易出错,并且会忽略不要重复自己的原理。这可能是不言自明的,但我还没有看到。我可以像往常一样使用第一个(例如let user: User;吗?谢谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您可以仅将您的实体用作类型,甚至可以添加其他注释,例如class-validator个断言。只要不涉及typeorm(分别为class-validator),装饰器将被忽略。

请注意,尽管在整个应用程序中重用数据库架构会产生依赖性,并且使更改数据库架构变得更加困难(例如,用于性能优化)。特别是在较大的应用程序中,通过适配器层将API模式(易于使用,更接近真实世界的实体)和数据库模式(更多技术上的关系,技术细节)分开是有意义的。基本上,这是DRY和封装之间的权衡,请参阅thread进行扩展讨论。