首页 > 解决方案 > TypeScript 是如何知道元组类型的这种联合类型等同于联合的元组类型?

问题描述

TypeScript 是如何知道元组类型的这种联合类型等同于联合的元组类型?

type LHS = ['a' | 'b', 'b'];
type RHS = ['a', 'b'] | ['b', 'b']

type Equiv<T, U> = T extends U ? U extends T ? true : never : never;

const x: Equiv<LHS, RHS> = true; // ok

我之所以这么问,是因为这在"Advanced Logical Type Systems for Logical Languages"中作为示例给出。((α∪β)×β <: (α×β)∪(β×β),第 4 页)作者认为仅使用句法规则很难做到这样的情况,然后继续展示一种“语义”方法。

我正在寻找的是 TS 是否会在比较之前转换为析取范式,或者 TS 是否有真正彻底的打字规则?根据我上次玩内部组件时所知道的,我强烈怀疑后者,但想再次检查。

标签: typescript

解决方案


推荐阅读