10. 元组和数组的区别
约 471 字大约 2 分钟
2025-06-10
TypeScript 中的元组和数组都用于存储多个值,但它们有重要差异:
核心区别
特性 | 元组 (Tuple) | 数组 (Array) |
---|---|---|
元素类型 | 各位置可不同 | 所有元素类型相同 |
长度 | 固定长度 | 可变长度 |
类型表示 | [Type1, Type2, ...] | Type[] 或 Array<Type> |
用途 | 表示结构化的固定格式数据 | 存储同类型元素的集合 |
特殊情况下,如果成员类型兼容,元组是可以赋值给数组的,但反之不行:
代码示例
元组示例
// 定义元组类型 - 固定长度,各位置类型不同
let person: [string, number, boolean] = ["Alice", 30, true];
// 访问元素有明确类型提示
let name: string = person[0]; // string
let age: number = person[1]; // number
// 错误示例
person[3] = "new"; // 错误!长度固定为3
person[1] = "30"; // 错误!第二个位置必须是number
数组示例
// 定义数组类型 - 元素类型相同,长度可变
let numbers: number[] = [1, 2, 3];
let names: Array<string> = ["Alice", "Bob"]; // 泛型语法
// 可以自由添加/删除元素
numbers.push(4); // 允许
numbers[0] = "1"; // 错误!必须是number
何时使用?
用元组:
- 函数返回多个不同类型的值
- 表示固定格式的数据结构(如 CSV 行)
- React 的
useState
返回类型就是元组:[state, setState]
用数组:
- 存储同类型的项目集合
- 需要动态增删元素的情况
- 使用数组方法(map/filter 等)处理数据
类型兼容性
元组可以赋值给数组(需满足元素类型兼容),但反之不行:
let tuple: [string, number] = ["Alice", 30];
let array: (string | number)[] = tuple; // 允许
let newArray = ["Bob", 40, true];
let newTuple: [string, number] = newArray; // 错误!
元组提供了比数组更精确的类型约束,适合需要固定结构的数据场景。
更新日志
2025/8/24 08:17
查看所有更新日志
e7112
-1于