TypeScript 元组(Tuple)
1. 解释
相同类型元素组成成为数组,不同类型元素组成了元组(Tuple)。
2. 定义元组类型
const list: [string, number] = ['Sherlock', ] // ok
const list1: [string, number] = [, 'Sherlock'] // error
当赋值或访问一个已知索引的元素时,会得到正确的类型:
const list: [string, number] = ['Sherlock', ]
list[].substr() // ok
list[].substr() // Property 'substr' does not exist on type 'number'.
代码解释:
const list: [string, number] = ['Sherlock', ]
list.push('hello world')
console.log(list) // ok [ 'Sherlock', 1887, 'hello world' ]
console.log(list[]) // Tuple type '[string, number]' of length '2' has no element at index '2'
代码解释:
第 5 行,该元组只有两个元素,不可越界访问第三个元素。
3. 可选元素类型
const list: [number, string?, boolean?]
list = [, 'Sherlock', true]
list = [, 'Sherlock']
list = []
4. 元组类型的 Rest 使用
declare function rest(...args: [number, string, boolean]): void
等价于:
declare function rest(arg1: number, arg2: string, arg3: boolean): void
TIPS: 在声明文件(.d.ts)中,关键字 declare 表示声明作用。声明文件用于编写第三方类库,通过配置
tsconfig.json
文件中的declaration 为 true
,在编译时可自行生成。
还可以这样:
const list: [number, ...string[]] = [, 'a', 'b', 'c']
const list1: [string, ...number[]] = ['a', , , ]
5. 小结
本小节介绍了元组类型的声明方式和一些技巧,在实际开发中可以灵活应用。