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