Node.js 雀巢公司>;将复杂实体映射到复杂DTO的类型映射
Im使用class transformer>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
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
将不会被使用。非常好,谢谢!