![](/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.