跳到主要内容

数组与元组类型

数组类型有哪几种写法?​

// 类型 + 方括号
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;
  • 边界: 越界访问本身缺少运行期保证, 推断出的联合类型只是编译期近似;