4. TS中的数组
数组 array
根本特征:所有成员的类型必须相同,但是成员数量是不确定的,可以是无限数量的成员,也可以是零成员。
// 写法一
let arr:number[] = [1, 2, 3];
//写法二
let arr:Array<number> = [1, 2, 3]; // 这种写法本质上属于泛型
需要只读数组的时候,只需要再类型声明前加上readonly:
const arr:readonly number[] = [0, 1];
TypeScript 将readonly number[]与number[]视为两种不一样的类型,后者是前者的子类型。(因为只读数组没有pop()、push()之类会改变原数组的方法)
特殊的是:如果这样写就会报错:const arr:readonly Array = [0, 1];
需要写成这样:
// 泛型的方法生成只读数组
const a1:ReadonlyArray<number> = [0, 1];
或
const a2:Readonly<number[]> = [0, 1]
还有一种方法,利用类型断言生成只读数组:
const arr = [0, 1] as const;
多维数组:
var multi:number[][] = [[1,2,3], [23,24,25]];
元组 tuple
元组(tuple)是 TypeScript 特有的数据类型,JavaScript 没有单独区分这种类型。它表示成员类型可以自由设置的数组,即数组的各个成员的类型可以不同。
由于成员的类型可以不一样,所以元组必须明确声明每个成员的类型。
const s:[string, string, boolean] = ['a', 'b', true];
注意:元组的成员类型是写在方括号里面。
元组类型需要显式声明,否则Ts会推断类型为联合类型。
元组成员的类型可以添加问号后缀(?),表示该成员是可选的。但是只能用于元组的尾部成员,也就是说,所有可选成员必须在必选成员之后。
数组的长度不是固定的,而元组中元素的数量是固定的。但是使用扩展运算符(...),可以表示不限成员数量的元组。
type NamedNums = [
string,
...number[]
];
const a:NamedNums = ['A', 1, 2];
const b:NamedNums = ['B', 1, 2, 3];
元组也可以只读:
// 写法一
type t = readonly [number, string]
// 写法二
type t = Readonly<[number, string]>
// 写法三
const arr = [1, 2] as const;
评论