美文网首页
TypeScript 详解之 TypeScript 的数组类型

TypeScript 详解之 TypeScript 的数组类型

作者: you的日常 | 来源:发表于2023-08-11 08:54 被阅读0次

JavaScript 数组在 TypeScript 里面分成两种类型,分别是数组(array)和元组(tuple)。

简介

TypeScript 数组有一个根本特征:所有成员的类型必须相同,但是成员数量是不确定的,可以是无限数量的成员,也可以是零成员。

数组的类型有两种写法。第一种写法是在数组成员的类型后面,加上一对方括号。

let arr:number[] = [1, 2, 3];

上面示例中,数组arr的类型是number[],其中number表示数组成员类型是number

如果数组成员的类型比较复杂,可以写在圆括号里面。

let arr:(number|string)[];

上面示例中,数组arr的成员类型是number|string

这个例子里面的圆括号是必须的,否则因为竖杠(|)的优先级低于[],TypeScript 会把number|string[]理解成numberstring[]的联合类型。

如果数组成员可以是任意类型,写成any[]。当然,这种写法是应该避免的。

let arr:any[];

数组类型的第二种写法是使用 TypeScipt 内置的 Array 接口。

let arr:Array<number> = [1, 2, 3];

上面示例中,数组arr的类型是Array<number>,其中number表示成员类型是number

这种写法对于成员类型比较复杂的数组,代码可读性会稍微好一些。

let arr:Array<number|string>;

这种写法本质上属于泛型,这里只要知道怎么写就可以了,详细解释参见《泛型》一章。另外,数组类型还有第三种写法,因为很少用到,本章就省略了,详见《interface 接口》一章。

数组类型声明了以后,成员数量是不限制的,任意数量的成员都可以,也可以是空数组。

let arr:number[];
arr = [];
arr = [1];
arr = [1, 2];
arr = [1, 2, 3];

上面示例中,数组arr无论有多少个成员,都是正确的。

这种规定的隐藏含义就是,数组的成员是可以动态变化的。

let arr:number[] = [1, 2, 3];

arr[3] = 4;
arr.length = 2;

arr // [1, 2]

上面示例中,数组增加成员或减少成员,都是可以的。

正是由于成员数量可以动态变化,所以 TypeScript 不会对数组边界进行检查,越界访问数组并不会报错。

let arr:number[] = [1, 2, 3];
let foo = arr[3]; // 正确

上面示例中,变量foo的值是一个不存在的数组成员,TypeScript 并不会报错。

TypeScript 允许使用方括号读取数组成员的类型。

type Names = string[];
type Name = Names[0]; // string

上面示例中,类型Names是字符串数组,那么Names[0]返回的类型就是string

由于数组成员的索引类型都是number,所以读取成员类型也可以写成下面这样。

type Names = string[];
type Name = Names[number]; // string

上面示例中,Names[number]表示数组Names所有数值索引的成员类型,所以返回string

数组的类型推断

如果数组变量没有声明类型,TypeScript 就会推断数组成员的类型。这时,推断行为会因为值的不同,而有所不同。

如果变量的初始值是空数组,那么 TypeScript 会推断数组类型是any[]

相关文章

网友评论

      本文标题:TypeScript 详解之 TypeScript 的数组类型

      本文链接:https://www.haomeiwen.com/subject/ousnpdtx.html