TypeScript 元组(Tuple)

38 阅读1分钟

TypeScript 元组(Tuple)

相同类型元素组成成为数组,不同类型元素组成了元组(Tuple)。元组可以存储不同类型的元素,而非像数组那样只能存储相同元素类型(any[] 除外)。

1.定义元组类型

声明一个由 stringnumber 构成的元组:

const list: [string, number] = ['Sherlock', 1887]   // okconst list1: [string, number] = [1887, 'Sherlock']  // error

元组中规定的元素类型顺序必须是完全对照的,而且不能多、不能少,list1 中定义的第一个元素为 string类型,不能赋值为 number类型的数据。

要注意元组的越界问题,虽然可以越界添加元素(不建议),但是不可越界访问:

const list: [string, number] = ['Sherlock', 1887]
list.push('hello world')
​
console.log(list)      // ok [ 'Sherlock', 1887, 'hello world' ]
console.log(list[2])   // Tuple type '[string, number]' of length '2' has no element at index '2'

2.可选元素类型

元组类型允许在元素类型后缀一个 ? 来说明元素是可选的:

const list: [number, string?, boolean?]
list = [10, 'Sherlock', true]
list = [10, 'Sherlock']
list = [10]

可选元素必须在必选元素的后面,也就是如果一个元素后缀了 ?号,其后的所有元素都要后缀 ?号。

3.元组类型的 Rest 使用

元组可以作为参数传递给函数,函数的 Rest 形参可以定义为元组类型:

function rest(...args: [number, string, boolean]): void
​
还可以这样:
const list: [number, ...string[]] = [10, 'a', 'b', 'c']
​
const list1: [string, ...number[]] = ['a', 1, 2, 3]
​

Rest 元素指定了元组类型是无限扩展的,可能有零个或多个具有数组元素类型的额外元素。