我正在学习Typescript联合。我用类型number[]分配了一个数组|string[].但是当我把任何字符串或数字压入其中时,我会得到一个错误“*'string'类型的参数不能赋值给'never'类型的参数 *“.
let arr1: string[] | number[] = [];
let arr2: (string | number)[] = [];
let arr3: Array<number | string> = [];
arr1.push(21);
//Error for above push
arr2.push(1);
arr2.push("John Wick");
arr3.push(2);
arr3.push("John Wick");
这里我想把arr1设为number或者string数组。
有人能帮我弄明白这里发生了什么吗。
可能是因为union吗?因为当我给一个新数组赋值时,就没有问题了。只有在**.push()**的情况下才有问题。
let arr1: string[] | number[] = [];
let arr2: (string | number)[] = [];
let arr3: Array<number | string> = [];
arr1 = ["John", "Wick"];
arr1 = [0, 1, 2];
//No Error here
let number: string | number = "true";
number = 21;
1条答案
按热度按时间wi3ka0sx1#
这里...
......你基本上是在说:有一个数组
arr1
,它可以是string[]
或number[]
类型。同时,您赋值给一个没有任何类型的数组,因此编译器实际上不知道arr1
是string[]
还是number[]
类型。一旦您赋值给编译器知道类型的arr1
,当调用push
操作时,它也可以正确地检查类型。