typescript - 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 是否有真正彻底的打字规则?根据我上次玩内部组件时所知道的,我强烈怀疑后者,但想再次检查。
解决方案
推荐阅读
- python - 标签文本不会在 python tkinter 上立即更改
- javascript - webpack 插件中的“应用”是否与 js 中的“应用”相同,这意味着更改它
- reactjs - 检查文件是图像还是视频,并使用正确的标签?
- c++ - 使用 v4l2 在 C++ 中捕获 YUYV
- python - 获取所有指定大小的连续子序列,同时也环绕到前面
- c++ - 使用类和运算符重载计算 3D 中两点之间距离的程序
- java - SpringBoot - 从第一个模块welcomeController 返回第二个模块的html页面
- windows - 将 gitbash 添加到 windows cmd 以运行 make 文件
- python - 如何比较列表中字符串的第一个和最后一个索引
- java - 无法验证 google recaptcha 企业。收到错误:java.io.IOException:应用程序默认凭据不可用