0%

【052】typescript:元组类型

元组类型是另一种 Array 类型,它确切地知道它包含多少个元素,以及它在特定位置包含哪些类型。

简单使用

1
2
type Tuple = [ string, number ]
const person_01: Tuple = [ '张三', 24 ]

这里的 person 是 string 和 number 的元组类型。元组类型可以把多个元素作为一个单元传递。
你也可以这样写

1
const person_02: [ string, number ] = [ '李四', 30 ]

赋值和访问

1
2
3
4
5
6
let person_03: [ string, number ] = [ '王五', 18 ]
person_03[0] = '老六'
person_03[1] = 25
console.log(person_03[0]) // 老六
console.log(person_03[1]) // 25
console.log(person_03) // [ '老六', 25 ]

在函数中的使用

1
2
3
4
5
6
7
8
let PersonFn = (person: [ string, number ]) => {
console.log(person[0]) // 小七
console.log(person[1]) // 20
// console.log(person[2])
console.log(person) // [ '小七', 20 ]
}
PersonFn([ '小七', 20 ])

如果我们试图索引超过元素的数量,我们会得到一个错误,比如

1
2
// 长度为 "2" 的元组类型 "[string, number]" 在索引 "2" 处没有元素。
console.log(person[2])

解构元组

使用 JavaScript 的数组解构来 解构元组

1
2
3
4
5
let TupleFn = (person: [ string, number ]) => {
const [name, age] = person
console.log(`我是${name},今年${age}岁`) // 我是老王,今年28岁
}
TupleFn([ '老王', 28 ])

可选属性

1
2
3
4
5
6
type Man = [string, number, string?]
function ManFn(person: Man) {
console.log(person.length)
}
ManFn(['老王', 40]) // 2
ManFn(['老王', 40, '男']) // 3

总结

元组类型在大量基于约定的 API 中很有用,其中每个元素的含义都是 “明确的”。这使我们在解构变量时可以灵活地命名变量。

1
2
3
let person: [string, number, string] = ['老王', 40, '男']
const [name, age, sex] = person
console.log(`我是${name},今年${age}岁,${sex}`) // 我是老王,今年40岁,男