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

3

我想知道是否有一种方法可以忽略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个回答

3
您可以直接使用您的实体作为类型,甚至可以添加其他注释,例如class-validator断言。只要未涉及 typeorm(或class-validator),这些装饰器将被忽略。
请注意,尽管在整个应用程序中重用数据库架构会创建依赖关系并使更改数据库架构变得更加困难(例如,用于性能优化),但在较大的应用程序中,将API架构(易于消费、更接近真实世界实体)和数据库架构(更技术化,例如关系、技术细节)与适配器层分离开来是有意义的。这基本上是DRY和封装之间的权衡,请参见此帖子以获取扩展讨论。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接