如果一个类型是多个类型的联合类型,且多个类型含有一个公共属性,那么就可以利用这个公共属性,来创建不同的类型保护区块

enum CarTransmission {Automatic = 200,Manual = 300
}interface Motorcycle {vType: "motorcycle"; // discriminantmake: number; // year
}interface Car {vType: "car"; // discriminanttransmission: CarTransmission
}interface Truck {vType: "truck"; // discriminantcapacity: number; // in tons
}

基于前面定义了三个接口,我们可以创建一个 Vehicle 联合类型:

type Vehicle = Motorcycle | Car | Truck;

接下来进行类型守卫

function evaluatePrice(vehicle: Vehicle) {switch(vehicle.vType) {case "car":return vehicle.transmission * EVALUATION_FACTOR;case "truck":return vehicle.capacity * EVALUATION_FACTOR;case "motorcycle":return vehicle.make * EVALUATION_FACTOR;}
}

完整demo

interface car{type:'car',age:number
}
interface bicycle{type:'bicycle',sex: number
}
interface boat{type:'boat',grade:number
}type Vehicle = car | bicycle | boat;
const EVALUATION_FACTOR = Math.PI; function evaluatePrice(vehicle: Vehicle) {switch(vehicle.type) {case "car":return vehicle.age * EVALUATION_FACTOR;case "bicycle":return vehicle.sex * EVALUATION_FACTOR;case "boat":return vehicle.grade * EVALUATION_FACTOR;}
}const myTruck: car = { type: "car", age: 9.5 };
const VehicleDate = evaluatePrice(myTruck);
console.log(VehicleDate);

typescript可辨识联合相关推荐

  1. TypeScript基础入门之高级类型的可辨识联合(Discriminated Unions)

    2019独角兽企业重金招聘Python工程师标准>>> 转发 TypeScript基础入门之高级类型的可辨识联合(Discriminated Unions) 高级类型 可辨识联合(D ...

  2. TypeScript中的联合类型、类型别名、接口、类型断言

    一.联合类型 在TypeScript中,联合类型(Union Types)是指用"|"符号将多个类型组合成一个的类型.这种类型可以包含不同的类型,例如字符串.数字或对象.这些不同类 ...

  3. TypeScrpt 学习指南

    最近比较懒 哎 大秦赋 大秦帝国 太好看了 彩 彩 彩 本文,日常白嫖大佬的文章,分享出来. 一.TypeScript 是什么 TypeScript 是一种由微软开发的自由和开源的编程语言.它是 Ja ...

  4. 「1.8W字」2020不可多得的 TS 学习指南

    阿宝哥第一次使用 TypeScript 是在 Angular 2.x 项目中,那时候 TypeScript 还没有进入大众的视野.而现在学习 TypeScript 的小伙伴越来越多了,本文阿宝哥将从 ...

  5. 硬干货!1.8W字TS 学习指南,我不信你一口气能读完(建议收藏)

    阿宝哥第一次使用 TypeScript 是在 Angular 2.x 项目中,那时候 TypeScript 还没有进入大众的视野.而现在学习 TypeScript 的小伙伴越来越多了,本文阿宝哥将从  ...

  6. TypeScript学习(三):联合类型及推论

    前面说到了typescript中的数据类型的定义及类型推论,定义的方式也就是单数据类型定义或者是任意类型的定义,但是我们在开发中,有时候会涉及到一些变量的值类型校验,例如只需要数值和字符串,或者数值和 ...

  7. typescript 数据类型、函数返回值、类型断言、联合类型、类型兼容

    null和undefined类型:是所有类型的子类型,即可以将任意类型赋值为二者any类型:可以赋值任何类型unknown类型:引入的顶级类型unknown,对照于any,unknown是类型安全的, ...

  8. typescript设置默认值_TypeScript 中神奇的 this 类型声明

    创建了一个"重学TypeScript"的微信群,想加群的小伙伴,加我微信"semlinker",备注重学TS哟 从 TypeScript 2.0 开始,在函数和 ...

  9. TypeScript 令我苦不堪言

    作者 | Ilya Suzdalnitski 责编 | 弯月 出品 | CSDN(ID:CSDNnews) 你是否被 TypeScript 的炒作假象所欺骗?TypeScript 真比 JavaScr ...

最新文章

  1. POJ1988 Cube Stacking
  2. elasticsearch分组统计,取最大值、最小值、求和
  3. java——File类常用方法
  4. C++ 使用A*算法解决八数码问题
  5. 一道经典极限题的分析与求解
  6. 关于Adodb.Stream 的使用说明
  7. Effective STL中文版 译序
  8. 绘制自己的人际关系图_攒人脉,建圈子,从绘制一张人际关系图开始。
  9. 全国职称计算机题库视频,全国职称计算机考试题库模拟训练—windowsXP
  10. html 制作箭头,怎么使用html制作箭头?制作箭头代码分享!
  11. Photoshop制作电影胶片效果
  12. 【题库】上海市学校心理咨询师-普通心理学-考点解析 13.3 性格测量
  13. Typescript浅尝
  14. [华硕路由器官方设置]ASUS RT-AC86U官方设置
  15. Insomnia下载
  16. 变焦 焦距 等效焦距
  17. 趣聊51之串口通信(实现篇)
  18. linux查看进程并kill
  19. 《图说VR入门》——DK2入门及其资源汇总
  20. 华大单片机 HC32F460 驱动BM8563ESA RTC芯片

热门文章

  1. 关于Netty的ByteBuff内存泄漏问题
  2. linux挂载NTFS分区
  3. Linux下安装Redmine(项目管理软件)
  4. .NET调用Oracle存储过程,使用数组类型的参数(如ArrayList)
  5. iOS8+ UITableView自动计算cell高度并缓存
  6. 6.22软件工程总结
  7. 关于[[NSNotificationCenter defaultCenter] addObserver不remove后续又收到通知crash问题
  8. 局部类型 之 部分方法
  9. windows和linux下的spice客户端使用方法
  10. homebrew install php53