当前位置: 首页 > news >正文

typescript基础之never

TypeScript 的 never 类型是一种特殊的类型,它表示的是那些永远不存在的值的类型。例如,一个抛出异常或无限循环的函数的返回值类型就是 never,因为它们永远不会返回任何值。never 类型是所有类型的子类型,也就是说,任何类型都可以赋值给 never 类型,但是 never 类型只能赋值给自己和 any 类型。never 类型有以下的特点和用途https://juejin.cn/post/7201048368389914682:

•  never 类型不能被实例化,也不能有任何值,甚至 undefined 也不行。

•  never 类型可以用来表示不可能发生的情况,例如在 switch 语句中的 default 分支,或者在类型保护中排除掉所有可能的情况。

•  never 类型可以用来进行疲劳性检查(exhaustiveness check),也就是检查是否所有的分支都被覆盖到了,如果有遗漏,就会报错。

下面是一些使用 never 类型的例子:

// 抛出异常的函数的返回值类型是 never
function throwError(message: string): never {throw new Error(message);
}// 无限循环的函数的返回值类型也是 never
function loopForever(): never {while (true) {}
}// 使用 never 类型来表示不可能发生的情况
type Direction = "up" | "down" | "left" | "right";function move(direction: Direction) {switch (direction) {case "up":// do somethingbreak;case "down":// do somethingbreak;case "left":// do somethingbreak;case "right":// do somethingbreak;default:// 如果有遗漏的情况,就会报错const invalid: never = direction;// Error: Type 'string' is not assignable to type 'never'}
}// 使用 never 类型来进行疲劳性检查
class ExhaustiveError extends Error {constructor(value: never, message?: string) {super(message);}
}function checkExhaustive(value: Direction) {switch (value) {case "up":// do somethingbreak;case "down":// do somethingbreak;default:// 如果有遗漏的情况,就会抛出异常throw new ExhaustiveError(value);// Error: Argument of type 'string' is not assignable to parameter of type 'never'}
}

http://www.lryc.cn/news/146543.html

相关文章:

  • 电子电路学习笔记之NCP304LSQ37T1G ——超低电流电压检测器
  • 【计算机组成原理】一文快速入门,很适合JAVA后端看
  • 10万字智慧政务大数据平台项目建设方案222页[Word]
  • Python-主线程控制子线程-4
  • 设计模式二十二:策略模式(Strategy Pattern)
  • 【c语言】结构体内存对齐,位段,枚举,联合
  • 干货丨软件测试行业迎来新时代,AI将成为主流技术?
  • MacOS goland go1.21 debug问题
  • python 笔记(1)——基础和常用部分
  • kafka架构和原理详解
  • wsl Ubuntu中非root的普通用户怎么直接执行docker命令
  • Web开发模式、API接口、restful规范、序列化和反序列化、drf安装和快速使用、路由转换器(复习)
  • <AMBA总线篇> AXI总线协议介绍
  • 一个简单的Python网络爬虫教程
  • YARN资源管理框架论述
  • Unity查找资源依赖关系
  • 【操作系统】聊聊局部性原理是如何提升性能的
  • 多线程应用——单例模式
  • 几种在JavaScript中创建对象的方式!
  • java项目mysql转postgresql
  • SpringBoot Mybatis 多数据源 MySQL+Oracle
  • (笔记五)利用opencv进行图像几何转换
  • 【Flutter】Flutter 使用 fluttertoast 实现显示 Toast 消息
  • nowcoder NC236题 最大差值
  • TCP/IP五层模型、封装和分用
  • LeetCode 面试题 01.08. 零矩阵
  • Qt应用开发(基础篇)——进度条 QProgressBar
  • 108页石油石化5G智慧炼化厂整体方案PPT
  • Codeforces 1625E2 括号树 + BIT
  • PHP命令行CLI的使用