序一:本来打算写“浅谈 Intersection Types 和 Union Types”的,后来考虑到前者的篇幅已经有点长了,就砍成了“浅谈 Intersection Types”,后半部分以后再谈。
序二:网上其实有挺多关于 intersection types (和 union types)的文章了,且大部分是以 TypeScript 为宿主语言进行说明的。不过那些文章比较侧重这两种类型在 TypeScript 中的使用方式,对这以外的知识鲜有说明,本文旨在弥补这一不足。
本文大量参考了《Programming with Intersection Types and Bounded Polymorphism》[1] 和 《Row and Bounded Polymorphism via Disjoint Polymorphism》[2],或者直接说翻译吧,更贴切些,毕竟也没有太多自己的原创研究。
Intersection 类型
Intersection 类型太长,后文一律简称 I 类型。
相信大家在生活中经常会看到 “既要……,且要……,还要……” 这样的句式,I 类型正是又一例证。
interface Fly {
void fly();
}
interface Swim {
void swim();
}
interface Run {
void run();
}
class C<T extends Fly & Swim & Run> {
T omni;
void test() {
omni.fly();
omni.swim();
omni.run();
omni.run();
omni.fly

本文介绍了Intersection Types的概念,以编程语言为背景,详细阐述了如何利用Intersection Types进行类型检查与函数重载,并探讨了其与参数化多态、特设多态和非确定行为之间的关系。通过示例展示了如何构造Intersection Type的数据,同时提出了该类型与Bounded Quantification的关联,引发对更多相关话题的思考。
最低0.47元/天 解锁文章
1313

被折叠的 条评论
为什么被折叠?



