• 标签联合


    我们可以把单例类型、联合类型、类型保护和类型别名这几种类型进行合并,来创建一个叫做可辨识联合的高级类型,它也可称作标签联合或代数数据类型。

    可辨识联合要求具有两个要素:

    • 具有普通的单例类型属性(这个要作为辨识的特征,也是重要因素)。
    • 一个类型别名,包含了那些类型的联合(即把几个类型封装为联合类型,并起一个别名
    interface Square {
      kind: "square"; // 这个就是具有辨识性的属性
      size: number;
    }
    interface Rectangle {
      kind: "rectangle"; // 这个就是具有辨识性的属性
      height: number;
       number;
    }
    interface Circle {
      kind: "circle"; // 这个就是具有辨识性的属性
      radius: number;
    }
    type Shape = Square | Rectangle | Circle; // 这里使用三个接口组成一个联合类型,并赋给一个别名Shape,组成了一个可辨识联合。
    function getArea(s: Shape) {
      switch (s.kind) {
        case "square":
          return s.size * s.size;
        case "rectangle":
          return s.height * s.width;
        case "circle":
          return Math.PI * s.radius ** 2;
      }
    }

    上面这个例子中,我们的 Shape 即可辨识联合,它是三个接口的联合,而这三个接口都有一个 kind 属性,且每个接口的 kind 属性值都不相同,能够起到标识作用。

  • 相关阅读:
    C++并发编程实战---阅读笔记
    设计模式---命令模式
    图解HTTP(六)HTTP首部
    HTTP 状态码
    使用VS2012调试Dump文件
    如何设置C++崩溃时生成Dump文件
    boost::asio::io_service类
    boost::asio 同步&异步例子
    boost::bind
    c++并发编程之原子操作的实现原理
  • 原文地址:https://www.cnblogs.com/guangzhou11/p/11319381.html
Copyright © 2020-2023  润新知