web-dev-qa-db-fra.com

Transformez la classe en classe / objet (Entity en DTO) dans TypeScript et NestS

Comment transformer l'entité de base de données User:

class User {
  public firstName: string;
  public lastName: string;
  public phone?: string;
  public email: string;
  public status: EUserState;
  public tokens: Token[];
  public password: string;
}

dans l'entité DTO GetUserDTO:

class GetUserDTO {
  public id: number;
  public firstName: string;
  public lastName: string;
  public phone?: string;
  public email: string;
}

dans TypeScript? J'utilise @nestjs, class-validator et class-transformer packages, mais je n'ai trouvé aucun moyen de les utiliser pour y parvenir.

Quelqu'un peut dire qu'avoir un DTO est inutile pour cela, mais nous avons des DTO partagés entre le serveur et le client pour maintenir la structure de l'API.

Des idées?

5
Baterka

tout d'abord, changez Entity en json brut en utilisant classToPlain de class-transformer

puis, changez plain json en DTO en utilisant plainToClass de class-transformer comme ci-dessous

  public async getAll(): Promise<ItemDTO[]> {
    return await this.repo.find()
      .then(items => items.map(e=>plainToClass(ItemDTO, classToPlain(e), { excludeExtraneousValues: true })));
  }

de plus, utilisons Exclude, Expose of class-transformer dans le DTO pour les données client que vous voulez que le client voie.

@Exclude()
export class ItemDTO implements Readonly<ItemDTO> {
  @ApiProperty({ required: true })
  @IsUUID()
  @Expose()
  id: string;
}
0
youngsooj