区分:

数组:纯粹 一个[]中的数据类型都是一致的
元组:不纯粹 一个[]中可能有不同类型的数据项

意义

当赋值或访问一个已知索引的元素时,可以得到正确的类型

let miao: [string, number] = ['cat', 18];
miao[0] = 'cat'
miao[1] = 18
miao[0].slice(1)
miao[1].toFixed(2)

错误的表达

let wang: [string, number];
wang = [ 'dog']
// error TS2322: Type '[string]' is not assignable to type '[string, number]'.
let wang: [string, number];
wang[0] = 'dog'
// TS2454: Variable 'wang' is used before being assigned.

往一个定义好类型的元组里添加元素,只能添加已有类型的联合,deme如下:
专业术语:当添加越界的元素时,它的类型会被限制为元组中每个类型的联合类型

let wang: [string, number];
wang =  ['dog', 18]

wang.push('miao')
wang.push(3)
wang.push(true) // error TS2345: Argument of type 'boolean' is not assignable to parameter of type 'string | number'.