如果我有一个变量,其类型是可以采用多种类型的数组……
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’.
反之亦然。
我将始终拥有多个无法更改的类型的数组。
答案 0 :(得分:1)
您可能希望您的isRed()
函数是user-defined type guard。也就是说,将其签名更改为
declare function isRed(x: any): x is RedType;
,并且您的代码应该开始编译而没有错误。希望能有所帮助;祝你好运!