You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为内部类型一致、跨元组可变的二元组数组指定TypeScript类型?

二元组数组的TypeScript类型校验方案

一、基础需求:每个二元组内元素类型一致

需要为foo函数的args参数标注类型,确保每个二元组的两个元素类型完全匹配,不同二元组的类型可自由变化。

类型标注实现

function foo<T extends readonly [unknown, unknown][]>(
  args: { [K in keyof T]: T[K] extends [infer U, infer U] ? T[K] : never }
) {
  // 函数业务逻辑
}

正确调用示例

foo([
  [1, 3],
  ["hello", "world"],
  [true, true],
  [2, 7]
]) // 无编译错误

错误调用示例

当二元组内元素类型不匹配时,会触发编译错误:

foo([
  [1, 3],
  ["hello", 5], // 错误:string与number类型不匹配
  [true, true],
  [2, 7n] // 错误:number与bigint类型不匹配
])

二、进阶需求:适配[SomeType<T>, T]结构的二元组

要求每个二元组的第一个元素是带泛型参数T的SomeType类型,第二个元素的类型必须与该泛型参数T完全匹配,不同二元组的T可自由变化。

先定义SomeType类型

type SomeType<T> = { value: T };

类型标注实现

function foo<T extends readonly [SomeType<unknown>, unknown][]>(
  args: { [K in keyof T]: T[K] extends [SomeType<infer U>, infer U] ? T[K] : never }
) {
  // 函数业务逻辑
}

正确调用示例

foo([
  [{ value: 1 }, 3],
  [{ value: "hello" }, "world"],
  [{ value: true }, true],
  [{ value: 2n }, 7n]
]) // 无编译错误

错误调用示例

当二元组内的泛型参数与第二个元素类型不匹配时,会触发编译错误:

foo([
  [{ value: 1 }, 3],
  [{ value: "hello" }, 5], // 错误:SomeType<string>的泛型参数与number不匹配
  [{ value: true }, true],
  [{ value: 2 }, 7n] // 错误:SomeType<number>的泛型参数与bigint不匹配
])

内容的提问来源于stack exchange,提问作者Dennis Kats

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 12:15:08