let x: [string, number]; // 类型必须匹配且个数必须为2
x = ['hello', 10]; // OK
x = ['hello', 10,10]; // Error
x = [10, 'hello']; // Error
let employee: [number, string] = [1, "Semlinker"];
let [id, username] = employee;
console.log(`id: ${id}`);
console.log(`username: ${username}`);
以上代码成功运行后,控制台会输出以下消息:
id: 1
username: Semlinker
这里需要注意的是,在解构赋值时,如果解构数组元素的个数是不能超过元组中元素的个数,否则也会出现错误,比如:
let employee: [number, string] = [1, "Semlinker"];\
let [id, username, age] = employee;
在以上代码中,我们新增了一个 age 变量,但此时 TypeScript 编译器会提示以下错误信息:
Tuple type '[number, string]' of length '2' has no element at index '2'.
和函数类型一样,元组类型的类型也是可以选择的,用法是在类型定义之后用?
let a : [string,number?];
a=['12'] //通过
a=['asd',1] //通过
a=[1,1] //不通过,第一个元素应该为字符串类型
就像js的数组一样,有场景需要长度不固定的数组,且前几个元素类型已被确定,那么这时候就可以用元组的剩余元素。
元组类型里最后一个元素可以是剩余元素,形式为 …X,这里 X 是数组类型。剩余元素代表元组类型是开放的,可以有零个或多个额外的元素。 例如,[number, …string[]] 表示带有一个 number 元素和任意数量string 类型元素的元组类型。为了能更好的理解,我们来举个具体的例子:
type RestTupleType = [number, ...string[]];
let restTuple: RestTupleType = [666, "Semlinker", "Kakuqo", "Lolo"];
console.log(restTuple[0]);
console.log(restTuple[1]);
ts3.4版本的新特性,可以保证元组的元素不被修改,任何企图修改元组中元素的操作都会抛出异常,相当于const关键字
const point: readonly [number, number] = [10, 20];
不要嘲笑那些比你们拼命努力的人,也不要理会那些嘲笑你拼命努力的人。