如何在typescript中连接union类型的数组?
当我尝试将concat
与union类型的数组一起使用时,出现以下错误:
- 此表达式不可调用。联合类型“{(... items:连接数组〈{...}〉[]):{...}[];(...项:({ ... }|连接数组〈{...;}〉)[]):{ ...;}【】; }|“{...; }”具有签名,但这些签名彼此不兼容.*
代码沙盒:https://codesandbox.io/s/modern-breeze-qt9mb?file=/src/index.ts
程式码范例:
const arr1 = [
{ val1: 1, val2: 2, val3: 3 },
{ val1: 11, val2: 22, val3: 33 }
];
const arr2 = [
{ val1a: "1a", val2a: "2a", val3a: "3a" },
{ val1a: "11a", val2a: "22a", val3a: "33a" }
];
const arr3 = [
{ foo: "lfsfs", bar: "fabgg" },
{ foo: "l414g", bar: "fahrh" }
];
function getRandomArr() {
if (Math.random() < 0.5) {
return arr2;
} else {
return arr1;
}
}
//error
const FinalArr = getRandomArr().concat(arr3);
2条答案
按热度按时间mrfwxfqh1#
你在转移注意力。你的问题***与***“union类型的数组”无关。问题是***所有***你试图
concat
的数组都有不同类型的元素,而concat
要求数组有相同类型的元素T
:以上是从
lib.es5.d.ts
。您可以尝试以下代码并了解错误消息,从而快速简化问题并消除转移注意力的内容:
您原来的错误消息还告诉您:联合类型得每个成员...都有签名,但这些签名彼此不兼容.
正如@jsejcksn建议的那样,“使用spread语法来合并数组”,“请参见tsplay.dev/wOzdRW“。这允许您将数组与混合元素类型连接起来:
qvtsj1bj2#
我遇到了这种类型的错误,我没有试图concat,我解决了它在一个简单的,但不是最好的方式,我有两个单独的接口,我使用联合,而不是我结合成一个单一的接口,并使所有的可选,所以它不会通过该领域的利益,但一些数据将被填充,一些未填充,因为所有的是可选的,它将工作正常,而不是联合。