Búsqueda de sitios web

javascript - ¿Cómo puedo ignorar los decoradores de TypeScript (usar las entidades de NestJS como tipos habituales)?


Quería saber si hay una manera de ignorar los decoradores de TypeScript y reutilizar el mismo archivo sin ellos. En NestJS estoy definiendo una entidad de esta manera.

import { PrimaryGeneratedColumn, Column, Entity } from 'typeorm';

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({ length: 100 })
  name: string;

  @Column({ length: 320 })
  email: string;
}

Pero en todas partes excepto en la configuración de la base de datos typeorm necesito exactamente el mismo tipo, solo que sin los decoradores.

export class User {
  id: number;
  name: string;
  email: string;
}

Redefinir tipos hace que el código sea vulnerable a errores y desconoce el principio de no te repitas. Esto podría ser autoexplicativo, pero aún no lo veo. ¿Puedo usar el primero como de costumbre (por ejemplo, let user: User;)? Gracias por tu ayuda.

Respuesta #1

Puedes simplemente usar tu entidad como un tipo, incluso podrías añadir otras anotaciones, por ejemplo, aserciones de class-validator a ella. Mientras typeorm (o class-validator) no esté involucrado, los decoradores simplemente serán ignorados.

Ten en cuenta, sin embargo, que reutilizar el esquema de tu base de datos en toda tu aplicación crea dependencias y dificulta cambiar el esquema de la base de datos (por ejemplo, para la optimización del rendimiento). Especialmente en aplicaciones más grandes, tiene sentido separar el esquema de la API (fácil de consumir, más cercano a entidades del mundo real) y el esquema de la base de datos (más técnico, por ejemplo, relaciones, detalles técnicos) con una capa adaptadora. Básicamente, es un equilibrio entre DRY y encapsulación, consulta este hilo para una discusión ampliada.

Artículos relacionados