TS清单 - 数组
数组的定义
数组就是一组数据的集合,其表现形式就是内存中的一段连续的内存地址,数组名称其实就是连续内存地址的首地址
数组是一种「线性表」的顺序存储结构
js
// 简便数组类型
let arr1: string[] = ['abc', 'Bob', 'xyz'];
// 使用泛型来表示数组
let arr2: Array<string> = ['xiaoming', 'xiaoli', 'xiaoyuan'];
// 复合类型
let arr3: (string | number)[] = [123, 'Bob', 'Tst'];
// 用接口表示数组:一般不用这种方式
interface StringArray {
[index: number]: string
}
let names: StringArray = ['Bob', 'Li', 'Yuan'];
// 只读数组
// 1. 使用"ReadonlyArray"内置类型
const readOnlyArr: ReadonlyArray<number> = [12, 34];
// readOnlyArr.push(1) // 报错:类型“readonly number[]”上不存在属性“push”。
// 2. 使用readonly修饰符,注意:readonly修饰符不能和泛型数组类型一起使用。
const readOnlyArr2: readonly number[] = [12, 34];
// 3. 使用Readonly工具类型
const readOnlyArr3: Readonly<number[]> = [12, 34];
元组
元组(Tuple)是一个类型化数组,每个索引都有预定义的长度和类型。
js
// 定义元组, 可以 push 改变长度
let oneTuple: [number, boolean, string]
// 正确初始化
oneTuple = [6, false, 'Bob']
// 定义只读元组
const twoTuple: readonly [string, number, boolean] = ['Bob', 123, true];
// 下面代码报错:类型“readonly [string, number, boolean]”上不存在属性“push”。
// twoTuple.push(345);
// 命名元组 & 元组解构
const group: [x: string, y: number] = ['Bob', 123];
const [x, y] = group;
console.log(x, y) // print: Bob 123