Typescript 中的数组和元组

135 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第14天,点击查看活动详情

今天学习的内容是 Typescript 的数组和元组类型。

数组

创建数组有两种方式。比如创建一个元素类型是 number 类型的数组:

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

还可以使用泛型创建数组

let arr2:Array<number> = [1, 2, 3, 4, 5];

强类型语言中泛型使用的非常广泛,它不需要提前指定类型,到真正要使用的时候再将类型通过参数的形式传递进来。

JS 中的数组非常灵活,长度不固定,元素类型任意。TS 也可以定义元素类型任意的数组:

// 元素类型是 number 或者 string
let arr3:(number|string)[] = [1, '2'];

使用 any 处理为动态类型的数组,表现就和 JS 一致了:

let arr3:any[] = [1, '2', false];

元组

元组(Tuple)类型是 TS 扩展的类型,原生 JS 中没有这个类型。

元组是一种特殊的数组,特点是长度固定元素类型固定

let person:[string, number] = ['kw', 18];

变量 person 的长度固定,类型也必须和声明的类型保持一一对应。如果将 person 的第一个元素改为其他非数字 string 类型,或者新增一个元素,都会报错:

person[0] = 20; // 报错:Type 'number' is not assignable to type 'string'.
​
person[2] = 30; // 报错:Type '30' is not assignable to type 'undefined'.

但是使用数组的 push 方法来给元组新增元素是不会报错的,并能能影响元组的值:

person.push(30);
console.log(person); // [ 'kw', 18, 30 ]

在使用元组时需要注意这一点。

还有,在声明元组时一定要指定类型,否则将会处理为普通的数组使用

元组类型适合组织有规律的数据,比如定义一个学生,有姓名和学号,就适合使用元组类型来描述,方便代码进行处理。

小结

本文介绍了 Typescript 的数组类型和元组类型。声明数组有两种方式,可以声明为静态类型的数组,也可以使用 any 声明为动态类型的数组。元组是一种特殊的数组,特点是长度固定,元素类型固定。