0

我有一个带有数组类型属性成员的类,数组中的一个项目可以是多种类型,例如 MetaViewDatalinked 或 MetaViewContainer,请参见下面的示例

class MetaViewContainer{
      children: (MetaViewDatalinked | MetaViewContainer)[];
}

class MetaViewDatalinked{
     id: string;
}

我想使用 class-transformer ( plainToClass(MetaViewContainer, json)) 用它的属性来初始化这个类。

如果我有没有数组的类,见下文,我会使用@Type

class MetaViewContainer{
          @Type((typeHelpOptions: TypeHelpOptions) => {
               if (typeHelpOptions.object.container)
                   return MetaViewContainer;
               return MetaViewDatalinked;
           })
          child: MetaViewDatalinked | MetaViewContainer;
    }

无论属性的类型如何,该问题仅@Type被调用一次:一个类或一个类数组,从而创建一个单一类型的数组(如果属性是数组)。

任何解决问题的想法都非常感谢。

4

1 回答 1

1

我解决了使用@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)[];
    }
于 2021-10-15T07:07:13.953 回答