TypeScript 如何定义数组类型

在日常开发中,数组是我们最常用的数据结构之一——比如整理购物清单、统计全班同学的考试成绩,都会用到数组。但如果用JavaScript开发,偶尔会碰到“数组里混了不同类型数据”的小麻烦:比如本来应该存字符串的数组,不小心加了个数字,运行时就可能出bug。TypeScript的数组类型定义,就是帮我们提前把这类“坑”堵上,让代码更稳。

最常用的数组类型:类型加方括号

最直观的定义方式,就是直接写数组里元素的类型,后面跟方括号[],像给数组“贴标签”,明确规定每一项必须是什么类型。

TypeScript 如何定义数组类型

举个生活化的例子:你整理每周的购物清单,每一项都得是商品名称(字符串),就可以这么写:

`typescript

// 定义一个只能存字符串的数组

const shoppingList: string[] = ['牛奶', '鸡蛋', '面包'];

`

如果不小心加了数字,比如['牛奶', 123, '面包'],TypeScript会立刻报错,告诉你“数字不能分配给字符串类型”,从源头避免了混乱。

再比如存同学的考试分数,都是数字,就用number[]:

`typescript

// 只能存数字的数组

const scores: number[] = [90, 85, 95];

`

这种方式简单好记,是日常开发里用得最多的写法。

另一种写法:泛型语法

如果你觉得“类型加方括号”不够灵活,还可以用TypeScript的泛型写法,本质和上面的效果一样,只是换了个“包装”的方式。

泛型语法用Array<类型>表示,比如刚才的购物清单,换成泛型就是:

`typescript

const shoppingList: Array<string> = ['牛奶', '鸡蛋', '面包'];

`

存分数的数组,换成泛型就是Array<number>。这种写法适合需要复用数组类型的场景,比如你要定义一个函数,参数是“字符串数组”,用泛型写的话,后续如果要换成数字数组,改个类型就行,不用重写结构。

特殊情况:数组里的元素类型不统一

有时候数组里需要存不同类型的元素,比如一个“个人信息数组”,第一项是名字(字符串),第二项是年龄(数字),这时候可以用“联合类型”来定义。

联合类型用|连接不同的类型,告诉TypeScript:“这个数组的每一项可以是A类型,也可以是B类型”。比如:

`typescript

// 数组每一项可以是字符串或数字

const personalInfo: (string | number)[] = ['张三', 18];

`

注意这里的括号不能省,(string | number)[]是说“数组每一项是string或number”,如果写成string | number[],就变成“要么是字符串,要么是数字数组”,完全是两种意思,这点要留意。

多维数组怎么定义?

如果是嵌套的数组,比如“每个班级的分数组成的年级分数表”,这就是二维数组,定义的时候只要再加一层类型标记就行。

比如二维数字数组(年级分数表):

`typescript

// 每一项是一个数字数组,也就是班级分数

const gradeScores: number[][] = [

[90, 85, 95], // 一班分数

[88, 92, 80] // 二班分数

];

`

换成泛型写法就是Array<Array<number>>,和上面的效果一致,只是写法不同,看个人习惯选就行。

用TypeScript定义数组类型,核心就是“给数组的每一项定好规则”,简单的场景用类型[],复杂一点的用泛型,混类型的用联合类型,多维数组就多加几层标记。掌握这些,就能避免很多数组类型的小bug,让代码更清晰可靠。

上一篇 Swift编程语言核心特性与应用场景的知识科普讲解