TypeScript 中的数组与元组

typescriptweb developmentfront end technology更新于 2026/1/20 20:07:17

使用 TypeScript 时,开发人员可以使用各种数据结构来存储和操作数据。数组和元组是两种常用的数据结构。数组和元组都允许存储多个值,但它们的结构和用法有所不同。

在本教程中,我们将探讨 TypeScript 中数组和元组的特性,讨论它们的区别,并提供示例来说明它们的应用。

什么是数组?

数组是一种存储元素集合的数据结构。它是一个有序的值列表,其中每个值都由一个索引标识。TypeScript 中的数组可以包含相同类型的元素,也可以包含不同类型的元素。我们可以使用方括号声明一个数组,元素之间用逗号分隔。

示例 1

let numbers: number[] = [1, 2, 3, 4, 5];
let fruits: string[] = ["apple", "banana", "orange"];
let mixed: (number | string)[] = [1, "two", 3, "four"];
console.log(`The value of numbers is ${numbers}`);
console.log(`The value of fruits is ${fruits}`);
console.log(`The value of mixed is ${mixed}`);

编译后,它将生成以下 JavaScript 代码 -

var numbers = [1, 2, 3, 4, 5];
var fruits = ["apple", "banana", "orange"];
var mixed = [1, "two", 3, "four"];
console.log("The value of numbers is ".concat(numbers));
console.log("The value of fruits is ".concat(fruits));
console.log("The value of mixed is ".concat(mixed));

输出

上述代码将产生以下输出 -

The value of numbers is 1,2,3,4,5
The value of fruits is apple,banana,orange
The value of mixed is 1,two,3,four

示例 2

这里我们尝试删除 numbers 数组的最后一个元素。

let numbers: number[] = [1, 2, 3, 4, 5];
console.log(numbers.length); // 输出:5
numbers.pop(); // 删除最后一个元素
console.log(numbers); // 输出:[1, 2, 3, 4]

编译后,将生成以下 JavaScript 代码 -

var numbers = [1, 2, 3, 4, 5];
console.log(numbers.length); // Output: 5
numbers.pop(); // Removing the last element
console.log(numbers); // Output: [1, 2, 3, 4]

输出

上述代码将产生以下输出 -

5
[ 1, 2, 3, 4 ]

什么是元组?

元组是一个有限有序的元素列表,其中每个元素可以具有不同的类型。与数组不同,元组的长度是固定的,并且每个元素的类型在声明时是已知的。在 TypeScript 中,元组使用方括号表示,每个元素用逗号分隔。我们也可以使用类型注释来指定每个元素的类型。

示例 3

let person: [string, number] = ["John", 25];
let point: [number, number, string] = [10, 20, "origin"];
console.log(`The value of person is ${person}`);
console.log(`The value of point is ${point}`);

编译后,它将生成以下 JavaScript 代码 -

var person = ["John", 25];
var point = [10, 20, "origin"];
console.log("The value of person is ".concat(person));
console.log("The value of point is ".concat(point));

输出

上述代码将产生以下输出 -

The value of person is John,25
The value of point is 10,20,origin

在上面的例子中,我们声明了两个元组。person 元组包含一个字符串元素,后跟一个数字元素。point 元组包含两个数字元素,后跟一个字符串元素。

示例 4

在此示例中,我们尝试将布尔值输入 true 添加到一个包含字符串和数字类型(因此类型为 string | number)的元组中。这会尝试修改数据属性类型,从而导致错误。

let data: [string, number] = ["Hello", 42];
console.log(data.length); // Output: 2
data.push(true);
var data = ["Hello", 42];
console.log(data.length); // Output: 2
data.push(true);

输出

我们得到以下编译时输出。

2

数组和元组之间的区别

现在我们了解了 TypeScript 中数组和元组的基本定义,让我们来探讨它们之间的区别。

结构

数组非常灵活,可以容纳任意数量的相同或不同类型的元素。它们本质上是动态的,这意味着我们可以在运行时向数组中添加或删除元素。另一方面,元组的长度是固定的,并且每个元素的类型都是预先确定的。一旦定义了元组,我们就不能添加或删除元素,也不能更改它们的类型。

用法

当我们需要处理元素集合时,通常使用数组,因为元素的顺序或位置非常重要。我们可以使用各种数组方法执行诸如添加、删除和修改数组中元素之类的操作。另一方面,元组通常用于表示一组具有不同类型的固定值,例如表示坐标或键值对。

类型安全性

与元组相比,数组的类型安全性较低。在数组中,我们可以访问任何索引处的任何元素,只要索引在数组边界内,TypeScript 就会允许这样做。如果我们访问不存在的元素或假设元素的类型错误,则可能会导致潜在的运行时错误。元组具有固定长度和已知类型,因此类型安全性更高。TypeScript 可以强制正确使用元组元素,从而降低运行时错误的概率。

为了总结数组和元组之间的区别,我们来看看下表:

差异基础

数组

元组

结构

动态,长度可变,元素类型相同或不同

长度固定,元素类型不同

用法

元素集合,顺序很重要

不同类型的固定值集

类型安全

类型安全性较低,可能存在运行时错误

类型安全性更高,强制类型

结论

总之,数组和元组都是 TypeScript 中有用的数据结构,但它们具有不同的特性和用途。数组在长度和元素类型方面提供了灵活性,使其适合存储顺序重要的元素集合。另一方面,元组具有固定的长度和预定的类型,因此非常适合表示具有不同类型的固定值集。

根据程序需求选择合适的数据结构非常重要。数组用途广泛,可以处理各种场景,而元组则提供更严格的类型安全性,并确保固定值集的正确使用。通过了解 TypeScript 中数组和元组之间的区别,您可以在为应用程序选择合适的数据结构时做出明智的决定。


相关文章