我想知道是否可以忽略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;
吗?谢谢您的帮助。
答案 0 :(得分:1)
您可以仅将您的实体用作类型,甚至可以添加其他注释,例如class-validator
个断言。只要不涉及typeorm
(分别为class-validator
),装饰器将被忽略。
请注意,尽管在整个应用程序中重用数据库架构会产生依赖性,并且使更改数据库架构变得更加困难(例如,用于性能优化)。特别是在较大的应用程序中,通过适配器层将API模式(易于使用,更接近真实世界的实体)和数据库模式(更多技术上的关系,技术细节)分开是有意义的。基本上,这是DRY和封装之间的权衡,请参阅thread进行扩展讨论。