浅谈 Intersection Types

序一:本来打算写“浅谈 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();
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值