数组与元组类型
数组类型有哪几种写法?
// 类型 + 方括号
let fibonacci: number[] = [1, 1, 2, 3, 5];
// 泛型
let fibonacci2: Array<number> = [1, 1, 2, 3, 5];
// 索引签名接口
interface NumberArray {
[index: number]: number;
}
let fibonacci3: NumberArray = [1, 1, 2, 3, 5];
- 共同点: 三者都表示"每个元素类型相同"的序列;
- 选择: 常见场景用
T[], 需要表达泛型约束时用Array<T>, 需要自定义形状时用索引签名;
元组的类型与初始化有什么要求?
- 含义: 各元素类型可以不同、长度固定的数组;
- 初始化: 必须按声明顺序赋满所有元素, 不能多也不能少;
const tom: [string, number] = ["Tom", 25];
- 用途: 表达"位置有意义"的定长组合, 例如
[键, 值];
元组的越界元素如何推断类型?
- 越界索引: 访问长度之外的索引时, 类型为该元组所有元素类型的联合;
- 例:
[string, number]的越界元素类型为string | number; - 边界: 越界访问本身缺少运行期保证, 推断出的联合类型只是编译期近似;