首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何顺序比较两个元组的类型?

如何顺序比较两个元组的类型?
EN

Stack Overflow用户
提问于 2021-11-21 15:44:19
回答 1查看 41关注 0票数 1

我想顺序比较两个元组中的类型,并返回包含0和1的元组来表示匹配类型和非匹配类型。

  1. 这两个元组不必长度相等。
  2. 输出的元组的长度将始终与T1的长度匹配。
  3. 对类型进行比较,以确保完全匹配。

代码语言:javascript
复制
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]: Equals<T1[K], T2[K]> extends true ?  1 : 0}

示例用法

游乐场

代码语言:javascript
复制
type example1 = TupleElementComparison<[string, number], [string, number]>
// [1, 1]

type example2 = TupleElementComparison<[string, number], [string, number, Function]>
// [1, 1]

type example4 = TupleElementComparison<[string, number, boolean, number, Function, string], [number, boolean, string, string, Function, number]>
// [0, 0, 0, 0, 1, 0]

type example3 = TupleElementComparison<[string, number, boolean, number, Function, string], [string, number, boolean, number]>
// [1, 1, 1, 1, 0, 0]

问题

TupleElementComparison实际上输出了预期的结果--当您在操场上按下结果类型时--但是我在用K访问T2时遇到了无法修复的错误

Type 'K' cannot be used to index type 'T2'.

有办法纠正这个错误吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-21 17:40:33

是的,有个办法。您需要向TS保证K代表keyof T2

代码语言:javascript
复制
type TupleElementComparison<T1 extends readonly unknown[], T2 extends readonly unknown[]> =
    {[K in keyof T1]:  Equals<T1[K], T2[K & keyof T2]> extends true ?  1 : 0}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70056039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档