数组的定义:
- 第一种,可以在元素类型后面接上[]
let list: number[] = [1, 2, 3];
- 第二种方式是使用数组泛型,Array<元素类型>
let list: Array<number> = [1, 2, 3];
如果数组想每一项放入不同数据怎么办?用元组类型
元组类型:
元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同
let tuple: [number, string] = [22, 'hahha'] OK
let tuple: [number, string] = ['hahha'],22,] Error //写错类型报错
let tuple: [number, string] = ['hahha'],22,23] Error //越界报错
可以对元组使用数组的方法,比如使用 push 时,但有越界报不报错????,这不跟上面定义的已知数量有矛盾吗??
let tuple: [number, string] = [18, 'lin']
tuple.push(100) // 但是只能 push 定义的 number 或者 string
上面问题网上大佬解释:
TypeScript 在类型控制的时候会受限于 JavaScript 的灵活性,所以一般并不是判断类型精确相等,而是判断类型兼容。
JavaScript 没有元组类型,但在提供了解构语法之后,数组常常被当作元组类型来使用。所以 TypeScript 提供元组类型,但元组类型实际只是固定了长度和每个元素类型的数组,可以使用数组的方法。但由于类型限制了长度和具体的元素类型,所以部分功能又受到限制。