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