TypeScript 中定义包含多种类型的数组

在 TypeScript 中,数组通常用于存储一组相同类型的元素。然而,在某些情况下,你可能需要一个数组来存储不同类型的数据。TypeScript 提供了多种方法来实现这一点,包括使用联合类型(Union Types)和元组(Tuples)。本文将详细介绍如何在 TypeScript 中定义包含多种类型的数组,并通过示例代码帮助你更好地理解这些概念。

使用联合类型

联合类型允许一个变量或数组可以有多种可能的类型。你可以使用管道符号 | 来定义联合类型。下面是一个简单的例子,展示如何使用联合类型来创建一个可以包含数字和字符串的数组:

let mixedArray: (string | number)[] = [1, "hello", 2, "world"];

// 输出数组内容
console.log(mixedArray);

在这个例子中,mixedArray 可以包含 stringnumber 类型的元素。TypeScript 编译器会检查数组中的每个元素是否符合联合类型定义。

使用元组

元组是一种特殊的数组,它允许你定义一个固定长度和类型的数组。每个位置上的元素可以有不同的类型。下面是一个使用元组的例子:

let tupleArray: [string, number, boolean] = ["TypeScript", 2023, true];

// 输出元组内容
console.log(tupleArray);

在这个例子中,tupleArray 是一个包含三个元素的元组,第一个元素是 string 类型,第二个元素是 number 类型,第三个元素是 boolean 类型。元组确保了数组在特定位置上的类型一致性。

可选和剩余元素

元组还支持可选元素和剩余元素的概念。通过使用问号 ? 和省略号 ... 来实现这些功能:

let optionalTuple: [string, number?, boolean?] = ["example", 42];

// 输出可选元组内容
console.log(optionalTuple);

let restTuple: [string, ...number[]] = ["numbers", 1, 2, 3, 4];

// 输出剩余元素元组内容
console.log(restTuple);

在第一个例子中,optionalTuple 是一个可选元组,第二个和第三个元素是可选的。在第二个例子中,restTuple 包含一个字符串和任意数量的数字。

使用枚举类型

除了联合类型和元组,你还可以使用枚举类型来定义多种类型的数组。枚举类型允许你定义一组命名的常量,这些常量可以作为数组中的元素类型:

enum Status {
  Active,
  Inactive,
  Pending
}

let statusArray: Status[] = [Status.Active, Status.Pending, Status.Inactive];

// 输出枚举类型数组内容
console.log(statusArray);

在这个例子中,statusArray 是一个包含 Status 枚举类型的数组。每个元素必须是 Status 枚举中的一个值。

总结

通过上述方法,你可以在 TypeScript 中定义包含多种类型的数组。联合类型提供了灵活的数组定义方式,元组则确保了特定位置上的类型一致性,而枚举类型则适用于需要一组固定常量的情况。合理使用这些特性可以使你的代码更加健壮和易于理解。