Node.js 雀巢公司>;将复杂实体映射到复杂DTO的类型映射

Node.js 雀巢公司>;将复杂实体映射到复杂DTO的类型映射,node.js,typescript,nestjs,typeorm,class-transformer,Node.js,Typescript,Nestjs,Typeorm,Class Transformer,Im使用class transformer>plainToClass(实体,DTO)将实体映射到DTO 我还实现了所描述的相关transform.interceptor模式 然后我对DTO的成员使用@Expose()。这非常有效,但我有一个限制,我需要在我的父DTO中映射成员DTO,而这并没有发生,请参见下面的简单示例 @Exclude() export class ParentDTO{ @Expose() pMember2 : string; @Expose() pMemb

Im使用class transformer>
plainToClass
(实体,DTO)将实体映射到DTO

我还实现了所描述的相关transform.interceptor模式

然后我对DTO的成员使用
@Expose()
。这非常有效,但我有一个限制,我需要在我的父DTO中映射成员DTO,而这并没有发生,请参见下面的简单示例

@Exclude()
export class ParentDTO{

  @Expose()
  pMember2 : string;

  @Expose()
  pMember2 : ChildDto[];
}

@Exclude()
export class ChildDTO{

  @Expose()
  cMember2 : string;
}

export class ParentEntity{
  pMember1 : number;
  pMember2 : string;
  pMember3 : string;
  pMember4
 : Child[];
}

export class ChildEntity{
  cMember1 : number;
  cMember2 : string;
  cMember3 : string;
}
现在,如果我运行
plainToClass(parentEntityFromDB,ParentDTO)
我希望得到以下结果

ParentDTO{
  pMember2 : string;
  pMember2 : ChildDto[];
}
然而,我得到的是

ParentDTO{
  pMember2 : string;
  pMember2 : Child[]; //Including all original members
}
基本上,plainToClass(entity,DTO)不会自动映射成员以匹配给定的DTO类型

有没有办法做到这一点,或者这是该方法的局限性


谢谢

您必须使用
@type
指定嵌套类型:

@Exclude()
export class ParentDTO{

  @Expose()
  pMember2 : string;

  @Expose()
  @Type(() => ChildDto)
  pMember2 : ChildDto[];
}

使用
@Type
装饰器,当调用
plainToClass
时,类转换器为给定属性实例化一个类。否则,嵌套属性将保持为普通javascript对象,因此您的
@Exclude
将不会被使用。

非常好,谢谢!