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

TypeScript如何逐位比对两个元组类型并修复索引访问报错

错误原因

因为T1与T2的长度没有绑定关系,T1的索引K不一定是T2的合法索引,所以TS默认不允许直接用K访问T2的元素。你之前的代码虽然运行结果符合预期,是因为类型计算时不存在的索引返回的类型与T1对应元素类型比对默认不匹配,刚好符合你要的逻辑,但语法层面确实不符合TS的类型索引规则,才会抛出错误。

修复方案

在访问T2的元素前,先判断当前索引K是否属于T2的合法索引:如果是,再做类型比对;如果不是,直接返回0即可,完全符合你预设的三条规则。
修复后的完整代码如下:

type Equals<X, Y> = [X] extends [Y] ? [Y] extends [X] ? true : false : false;

type TupleElementComparison<T1 extends readonly unknown[], T2 extends readonly unknown[]> = {
  [K in keyof T1]: K extends keyof T2 
    ? Equals<T1[K], T2[K]> extends true 
      ? 1 
      : 0 
    : 0
}

修复后所有示例的返回结果和原有预期完全一致,且不会再抛出索引错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:24:03