Skip to Content

面试导航 - 程序员面试题库大全 | 前端后端面试真题 | 面试

TypescriptTS 中元组和普通数组的区别

在 TypeScript 中,元组(Tuple)和常规数组(Array)都可以用来存储多个值,但它们有一些关键的区别。本文将详细对比这两种数据结构,帮助你理解它们的异同。

常规数组(Array)

常规数组是用来存储一系列相同类型的元素。数组中的所有元素通常都具有相同的数据类型。

  • 类型:常规数组中的元素类型通常是相同的

  • 长度:常规数组的长度是可变的

如下例子:

// 数字数组 let numbers: number[] = [1, 2, 3, 4]; // 字符串数组 let strings: string[] = ['apple', 'banana', 'cherry'];

元组(Tuple)

元组是一个特殊的数组类型,允许你存储不同类型的元素。元组的长度是固定的,且每个位置上的元素类型可以不同。

  • 类型:元组可以存储多种类型的元素,每个元素的类型可以不同

  • 长度:元组的长度是固定的

如下例子:

// 包含字符串、数字和布尔值的元组 let tuple: [string, number, boolean] = ['hello', 42, true];

元组和常规数组的区别

特性常规数组(Array)元组(Tuple)
元素类型元素类型通常相同元素类型可以不同
长度长度可变,元素个数可以变化长度固定,元素个数固定
访问元素的类型访问任何元素的类型是相同的每个元素的类型可能不同,访问时有不同的类型
灵活性适合存储同类型的元素适合存储不同类型的元素,尤其是在处理记录(如数据库记录)时
用途通常用于存储相同类型的集合,如数字列表、字符串列表等适用于固定结构的数据,如返回多个不同类型的值或记录

常规数组 vs 元组:示例对比

常规数组

常规数组中所有元素的类型应该是相同的。你可以访问数组中的任何元素,但它们的类型是相同的。

let arr: number[] = [10, 20, 30, 40]; // 数字数组 console.log(arr[0]); // 输出: 10 console.log(arr[2]); // 输出: 30 // 数组中所有元素的类型都是 number

如果尝试将不同类型的元素存入同一个数组,TypeScript 会报错:

let arr: number[] = [10, 'hello']; // 错误:不能将 string 类型的元素加入 number[] 类型的数组
元组

元组则允许你定义一个具有不同类型的数组。例如,假设我们有一个元组,用来存储用户的姓名、年龄和是否已注册的状态:

let user: [string, number, boolean] = ['Moment', 30, true]; console.log(user[0]); // 输出: Moment (类型是 string) console.log(user[1]); // 输出: 30 (类型是 number) console.log(user[2]); // 输出: true (类型是 boolean)

这里,元组中的元素分别是:string 类型(姓名)、number 类型(年龄)和 boolean 类型(是否已注册)。这使得元组非常适合用来表示一组结构化的数据。

你还可以通过位置来约束每个元素的类型:

let person: [string, number] = ['Bob', 25]; // 有固定的长度和类型 // let person: [string, number] = [25, "Bob"]; // 错误:顺序不对

元组的特性

  • 固定长度:元组的长度是固定的,并且在类型定义时指定了每个位置的数据类型。
let userInfo: [string, number] = ['Moment', 30]; // 正确 // let wrongUserInfo: [string, number] = ["Moment"]; // 错误:缺少第二个元素
  • 不同类型的元素:元组可以存储不同类型的元素,每个元素的类型在定义时已经确定。
let person: [string, number, boolean] = ['Moment', 30, true];
  • 可选元素:你可以通过 ? 来定义元组中的可选元素。
let employee: [string, number?, boolean?] = ['Moment']; // 第二个和第三个元素可以缺少

元组和常规数组的相似之处

你可以像访问常规数组一样通过索引访问元组的元素,并且可以使用 forfor...of 循环遍历数组和元组。

let numbers: number[] = [10, 20, 30]; for (let num of numbers) { console.log(num); } let tuple: [string, number] = ['Moment', 30]; for (let item of tuple) { console.log(item); }

总结

元组适用于存储不同类型的元素,常用于表示具有固定结构的数据,如用户信息或数据库记录;而常规数组则用于存储同类型的元素,适合表示动态变化的集合。常规数组的长度是可变的,所有元素的类型通常相同;元组则具有固定长度,每个位置上的元素类型是明确的。通过合理使用元组和数组,可以提高 TypeScript 的类型推断和代码的类型安全性。

最后更新于:
Copyright © 2025Moment版权所有粤ICP备2025376666