TypeScript 可能的急切解析类型参数

cbjzeqam  于 24天前  发布在  TypeScript
关注(0)|答案(1)|浏览(19)

Bug报告

在使用这里的 Equals 类型(#27024)(评论)时,我发现在将其 Package 在另一个类型中时出现了问题。
它似乎与以下内容相关:

  1. 比较类型的元组
  2. 通过 Package 函数类型向其中一个 Equals 类型参数提供预定的类型,并通过 Package 函数类型向另一个提供

🔎 搜索词

急切解析

🕗 版本和回归信息

针对 3.3.3 - 4.5.0 和 playground 中的 nightly 进行了测试

  • 我尝试了每个版本,并查阅了关于急切解析的 FAQ 条目

⏯ Playground 链接

Playground 链接

💻 代码

////////////////////////////////////////////////////////////////

type Equals<X, Y> =
    (<T>() => T extends X ? 1 : 2) extends
    (<T>() => T extends Y ? 1 : 2) ? true : false;

////////////////////////////////////////////////////////////////

type WorkingFunction<Type1, Type2> = Equals<[Type1, Type2], [Type1, Type2]> // OK

type NonWorkingFunction<Type1, Type2> = Equals<[Type1, Type2], [string, number]> // Not OK

type test1 = Equals<[string, number], [string, number]> // true 

type test2 = WorkingFunction<string, number> // true

type test3 = NonWorkingFunction<string, number> // false - expected this to also be true

🙁 实际行为

解析为 false

🙂 预期行为

解析为 true

vuv7lop3

vuv7lop31#

似乎不太对。Equals的更简单(且可行)的定义是

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

相关问题