TypeScript 之 交叉类型与联合类型

交叉类型

  • 特别适合对象混用的场景
  • 取并集
interface DogInterface {
  run(): void
}

interface CatInterface {
  jump(): void
}

let pet: Dog & Cat = {
  run(),
  jump()
}

联合类型

  • 可以使类型具有一定的不确定性,可以增加代码的灵活性
  • 变量联合类型
let a = number | string = 'a'
let b = 'a' | 'b' | 'c'
let c = 1 | 2 | 3
  • 对象联合类型
class Dog implements DogInterface {
  run(){}
  eat(){}
}

class Cat implements CatInterface {
  jump(){}
  eat(){}
}

enum Master { Boy, Girl }

function getPet(master: Master){
  let pet = master = Master.Boy ? new Dog() : new Cat()
  pet.eat()
  return pet
}

interface Square {
  kind: 'square';
  size: number;
}

interface Rectangle { 
  kind: 'rectangle';
  width: number;
  height: number;
}

interface Circle {
  kind: 'circle', 
  r: number
}

// 联合类型
type Shape = Square | Rectangle

function area(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.r ** 2  
    default:
      // 检查s是不是nerver类型 如果是 前面分支case齐全。 s不是nerver类型 有遗漏的case没写
      return ((e: nerver) => {throw new Error(e)})(s)    
  }
}

console.log(area({kind: 'circle', r: 1}))
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,145评论 1 32
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,860评论 2 9
  • 少年时候,做过很多梦,仗剑走天涯,黄昏,山头,一马一人,很萧索,甚至有点悲壮,但是自己觉得很酷。 这是少年时候对自...
    腰腿麻利阅读 140评论 0 0
  • 标签系统在很多的模块中会使用到,如何设计标签系统。1、标签是否系统内置标签(用户只做选择)2、标签的长度限制3、每...
    Brose阅读 247评论 0 0
  • YOUNG
    何年的百事可乐阅读 400评论 0 0