![](/img/trans.png)
[英]How to convert typescript class to plain javascript object with class-transformer
[英]Typescript How to initialize mixed type array with class-transformer
我有一个类型为数组的属性成员的类,数组中的一个项目可以是多种类型,例如 MetaViewDatalinked 或 MetaViewContainer,请参见下面的示例
class MetaViewContainer{
children: (MetaViewDatalinked | MetaViewContainer)[];
}
class MetaViewDatalinked{
id: string;
}
我想使用类转换器( plainToClass(MetaViewContainer, json)
)用其属性初始化类。
如果我有没有数组的类,请参见下面,我会使用@Type
class MetaViewContainer{
@Type((typeHelpOptions: TypeHelpOptions) => {
if (typeHelpOptions.object.container)
return MetaViewContainer;
return MetaViewDatalinked;
})
child: MetaViewDatalinked | MetaViewContainer;
}
问题是@Type
只被调用一次,而不管属性的类型:一个类或一个类数组,从而创建一个单一类型的数组(如果属性是数组)。
任何解决问题的想法都非常感谢。
我使用@Transform
装饰器解决了这个问题
class MetaViewContainer{
@Transform((params: TransformFnParams) => {
const children: (MetaViewDatalinked | MetaViewContainer)[] = [];
if (!params.value) return children;
if (Array.isArray(params.value)) {
for (const item of params.value) {
if (item.children)
children.push(plainToClass(MetaViewContainer, item));
else
children.push(plainToClass(MetaViewDatalinked, item));
}
}
return children;
})
children: (MetaViewDatalinked | MetaViewContainer)[];
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.