【问题标题】:How can I ignore TypeScript decorators (use NestJS entities like usual types)?如何忽略 TypeScript 装饰器(使用 NestJS 实体,如常用类型)?
【发布时间】:2019-08-24 20:13:47
【问题描述】:

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

    您可以只使用您的实体作为类型,您甚至可以添加其他注释,例如class-validator 对它的断言。只要不涉及typeorm(或class-validator),装饰器就会被忽略。

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

    【讨论】:

      猜你喜欢
      • 2022-08-15
      • 2019-07-23
      • 2021-01-24
      • 2019-02-03
      相关资源
      最近更新 更多