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

问题描述 投票:2回答:1

我想知道是否有办法忽略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;?感谢您的帮助。

javascript node.js typescript decorator nestjs
1个回答
1
投票

您可以将您的实体用作类型,甚至可以添加其他内容,例如class-validator断言。只要不涉及typeorm(resp.class-validator),装饰者就会被忽略。

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

© www.soinside.com 2019 - 2024. All rights reserved.