元组
数组合并了相同类型的对象,而元组(Tuple)合并了不同类型的对象。
元组起源于函数编程语言(如F#),这些语言中会频繁使用元组。
简单的例子
定义一对值分别为string
和number
的元组:
let tom:[string,number] = ['tom',25]
当赋值或者访问一个一直索引的元素时,会得到正确的类型:
let tom:[string,number];
tom[0]='1';
tom[1]=24;
// tom[3]=1;// 长度为 "2" 的元组类型 "[string, number]" 在索引 "3" 处没有元素。
tom[0].slice(1);
tom[1].toFixed(2)
也可以只赋值其中一项:
let tom:[string,number];
tom[0] = 'tom'
但是当直接对元组类型的变量进行初始化或者赋值的时候,需要提供所有元组类型中指定的项。
let tom:[string,number] ;
tom = ['1',1]
// tom=['1'] // 类型 "[string]" 中缺少属性 "1",但类型 "[string, number]" 中需要该属性。
越界的元素
当添加越界的元素时,它的类型会被限制为元组中每个类型的联合类型:
let tom:[string,number] ;
tom = ['1',1]
tom.push('male')
// tom.push(true) //类型“true”的参数不能赋给类型“string | number”的参数。