TypeScript数组联合

w46czmvw  于 2023-02-05  发布在  TypeScript
关注(0)|答案(1)|浏览(161)

我正在学习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;
wi3ka0sx

wi3ka0sx1#

这里...

let arr1: string[] | number[] = [];

......你基本上是在说:有一个数组arr1,它可以是string[]number[]类型。同时,您赋值给一个没有任何类型的数组,因此编译器实际上不知道arr1string[]还是number[]类型。一旦您赋值给编译器知道类型的arr1,当调用push操作时,它也可以正确地检查类型。

相关问题