这是我参与2022首次更文挑战的第20天,活动详情查看:2022首次更文挑战
元组
我们使用元组可以用来表示二维坐标系中的一个点,两个坐标点分别可以用来表示横坐标和纵坐标。元组中的每个元素的类型可以不必相同。元组的第一个参数可以为string类型也可以为number类型。元组实际上是一个数组,我们在给元组赋值的时候,数组中的每个元素类型都要与定义元组类型保持一致,当我们定义的数组类型与元组类型不匹配时,就会产生编译错误。在元组类型赋值的同时,我们还要保证数组中的元素数量与元组类型定义中元素的数量保持一致,不然也会产生编译错误。
const x: [number, number] = [6, 6];
const y: [string, number] = ['zss', 18]
元组可以定义为只读元素,这个和只读数组是类似的。只读元组类型是只读数组类型的子类型。我们可以通过readonly修饰符或者Readonly<T>方式。使用readonly修饰符能够定义只读元组,在定义只读元组时,将readonly修饰符置于元组类型之前就可以了。我们需要注意的是,在给只读元组类型赋值时,允许将常规元组类型赋值给只读元组类型,但是不允许将只读元组类型赋值给常规元组类型。由于元组的本质是数组,所以我们还可以使用访问数组元素的方法去访问元组中的元素,在访问元组中指定位置上的元素时,编译器也能自动判断出相应的元素类型。但是当我们访问数组中不存在的元素时不会产生编译错误,但是当访问元组中不存在的元素时会产生编译错误。我们修改元组元素值的方法与修改数组元素值的方法相同。
const x: [number, number] = [88, 66];
const y = x[0] // number
在定义元组时,我们也可以将某些元素定义为可选元素。定义元组可选元素的语法就是在元素类型的后面添加一个问号。如果元组中同时存在可选元素和必选元素,那么可选元素必须位于必选元素之后。在定义元组类型时,可以将最后一个元素定义为剩余元素,剩下的可以用[...X[]]来表示。如果元组类型定义中含有剩余元素,那么该元组的元素数量是自由的,它可以包含0个或者多个指定类型的剩余元素。
[X0?, X1?, ..., Xn?]
[Y0, Y1?, ..., Yn]
let x: [number, ...string[]];
x = [1];
x = [1, 'zss'];