在缩小范围时,您可以将联合的选项减少到您已删除所有可能性并且一无所有的程度。 在这些情况下,TypeScript 将使用 never 类型来表示不应该存在的状态。

never 类型可分配给每种类型; 但是,没有类型可以分配给 never(除了 never 本身)。 这意味着您可以使用缩小并依靠从不出现在 switch 语句中进行详尽的检查。

可以善用这一点进行错误处理。

例如,向我们的 getArea 函数添加一个默认值,该函数试图将形状分配为 never 在尚未处理所有可能的情况时引发。

interface Circle {kind: "circle";radius: number;
}interface Square {kind: "square";sideLength: number;
}type Shape = Circle | Square;function getArea(shape: Shape) {switch (shape.kind) {case "circle":return Math.PI * shape.radius ** 2;case "square":return shape.sideLength ** 2;default:const _exhaustiveCheck: never = shape;return _exhaustiveCheck;}
}

如果我们在 shape 联合类型里增加一个新字段,比如:

interface Triangle {kind: "triangle";sideLength: number;
}

会立即遇到语法错误:

TypeScript 里 never 类型的用法举例相关推荐

  1. 【转】awk 里的substr函数用法举例

    awk 里的substr函数用法举例: 要截取的内容: 2007-08-04 04:45:03.084 - SuccessfulTradeResult(status: 1, currencyPair: ...

  2. TypeScript里的类型合并操作符

    通过 & 运算符可以将现有的多种类型叠加到一起成为一种类型: type PointX = { x: number; }; type PointY = { y: number; }type Po ...

  3. TypeScript里的类型为any和泛型的区别

    看下面这个TypeScript函数: function identity(arg: any): any {return arg; } 虽然使用any类型后这个函数已经能接收任何类型的arg参数,但是却 ...

  4. TypeScript笔记(4)—— TypeScript中的类型注解

    TypeScript(4):类型注解 [导读]JavaScript是若类型语言,而TypeScript里的类型注解是一种轻量级的为函数或变量添加约束的方式,为我们提供了静态类型分析能力,这样我们就可以 ...

  5. TypeScript里的工具类型Partial的理解用法

    TypeScript里的工具类型Partial的理解用法 Partial 可以快速把某个接口类型中定义的属性类型变成可选的(Optional): 其实Partial源码很简单 Partial 可以快速 ...

  6. TypeScript里一些特殊的类型

    本文内容部分来自:https://www.w3cschool.cn/typescript/typescript-basic-types.html any 有时候,我们会想要为那些在编程阶段还不清楚类型 ...

  7. TypeScript 里 interface 和 type 的区别

    StackOverflow 上的讨论链接 Interface vs Type alias in TypeScript 2.7 Differences Between Type Aliases and ...

  8. TypeScript里string和String,真不是仅仅是大小写的区别

    本文分享自华为云社区<TypeScript里string和String的区别>,作者:gentle_zhou . 背景 与JavaScript语言不同的是,TypeScript使用的是静态 ...

  9. java的枚举类型是什么_什么是枚举(java枚举类型enum用法)

    最佳回答 枚举 1.枚举 (enumeration) 值类型的一种特殊形式,它从 System.Enum 继承,并为基础基元类型的值提供备用名称.枚举类型有名称.基础类型和一组字段.基础类型. &qu ...

最新文章

  1. 宝塔php安装那个合_通过宝塔面板一键搭建wordpress博客
  2. Oracle 11gR2学习之三(创建用户及表空间、修改字符集和Oracle开机启动)
  3. oracle 批量修改表结构,关于Oracle批量修改表结构相关内容的整理
  4. Python,得到列表最小k个数或最大k个数的索引
  5. (转)WEB2.0的单手定则
  6. VC++ (VS2008)里面char和LPTSTR的转换问题
  7. BMC之ipmitool 命令收集
  8. Bootstrap基本使用
  9. 转鼓式精密过滤器滤网
  10. 常见web漏洞修复方法
  11. 计算机删除行快捷键,删除快捷键是什么?电脑删除快捷键有哪些?
  12. 好看的皮囊 · 也是大自然的杰作 · 全球高质量 · 美图 · 集中营 · 美女 · 2017-08-29期...
  13. 《焦虑心理学》——压力感篇
  14. JQuery-Snowfall降雪插件使用
  15. ByVal与ByRef
  16. C\C++中strcat()函数
  17. 项目经理需要掌握的硬技能和软技能
  18. C语言练习-输出3的倍数(1-100)
  19. STM32F051学习- GPIO
  20. 别再全网找了,这四款良心软件,还你一个清爽的电脑桌面

热门文章

  1. 为何2018年中国自然灾害损失大幅下降?官方回应
  2. 转:java中static、final、static final的区别
  3. Node环境的配置与安装(windows系统)(超详细)
  4. 【Java学习笔记之一】java关键字及作用
  5. 网站架构演变和知识体系
  6. Sbo通用数据选择功能的实现
  7. Node js redis
  8. 利用事件冒泡实现简单的网页计算器
  9. Mac Hadoop的安装与配置
  10. 表单form数据默认以键值对的形式将数据回发到服务器,回发非纯文本需使用enctype=multipart/form-data方式编码为整条消息...