簡體   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