繁体   English   中英

Typescript 如何使用类转换器初始化混合类型数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM