如何在TypeScript中映射多个类型的数组?

时间:2019-03-29 16:31:49

标签: javascript reactjs typescript ecmascript-6

如果我有一个变量,其类型是可以采用多种类型的数组……

type myData = (RedType | BlueType)[];
//`const data` is of type myData

我正在对类型进行手动检查,条件是对变量数据做一些逻辑……

     {data.map((element, index) => {
        if (isRed(element)) {
          return <Red data={element} key={index} />;
        } else {
          return <Blue data={element} key={index} />;
        }
      })}

如您所见,我正在映射该数组,如果它是RedType,我将返回一个Component,而对于BlueType我将返回其他内容。

但是,打字稿不喜欢这样,也不知道我是手动执行条件操作。因此出现错误:

type ‘RedType | BlueType’ is not assignable to type ‘RedType’.  

反之亦然。

我将始终拥有多个无法更改的类型的数组。

1 个答案:

答案 0 :(得分:1)

您可能希望您的isRed()函数是user-defined type guard。也就是说,将其签名更改为

declare function isRed(x: any): x is RedType;

,并且您的代码应该开始编译而没有错误。希望能有所帮助;祝你好运!