1.简介
ts的数组有一个根本特征,每个数组成员的类型一致,但是成员的类型不确定,可以是无限数量成员,也可以是零成员
数组类型的两种写法
const num1:number[]=[1];
const num2:(number|string)[]=[1];
数组类型的第二种写法,使用 TypeScript 内置的 Array 接口。
let arr:Array<number> = [1, 2, 3];
数组类型声明了以后,成员数量是不限制的,任意数量的成员都可以,也可以是空数组
这种规定的隐藏含义就是,数组的成员是可以动态变化的。
let arr:number[] = [1, 2, 3];
arr[3] = 4;
arr.length = 2;
arr // [1, 2]
TypeScript 允许使用方括号读取数组成员的类型。
type Names = string[];
type Name = Names[0]; // string
由于数组成员的索引类型都是number
,所以读取成员类型也可以写成下面这样。
type Names = string[];
type Name = Names[number]; // string
2.数组的类型推断
如果数组变量没有声明类型,TypeScript 就会推断数组成员的类型。这时,推断行为会因为值的不同,而有所不同。
如果变量的初始值是空数组,那么 TypeScript 会推断数组类型是any[]
。
// 推断为 any[]
const arr = [];
后面,为这个数组赋值时,TypeScript 会自动更新类型推断。
const list = [];
list// ts类型推断: any[]
list.push(123);
list// ts类型推断: number[]
list.push('abc');
list// ts类型推断: (string|number)[]
类型推断的自动更新只发生初始值为空数组的情况。如果初始值不是空数组,类型推断就不会更新。
// 推断类型为 number[]
const arr = [123];
arr.push('abc'); // 报错
3.只读数组,const断言
JavaScript 规定,const
命令声明的数组变量是可以改变成员的。
但是,很多时候确实有声明为只读数组的需求,即不允许变动数组成员。
TypeScript 允许声明只读数组,方法是在数组类型前面加上readonly
关键字。
const arr:readonly number[] = [0, 1];
arr[1] = 2; // 报错
arr.push(3); // 报错
delete arr[0]; // 报错
4.多维数组
TypeScript 使用T[][]
的形式,表示二维数组,T
是最底层数组成员的类型。
var multi:number[][] =
[[1,2,3], [23,24,25]];