typescript基础之never

news/2025/2/4 2:52:41/

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.ppmy.cn/news/1074059.html

相关文章

Vue.js安装步骤和注意事项

安装完node.js后开始安装和部署Vue在检查webpack的下载版本时出现错误出现错误的原因是之前下载时未指定对应的版本号导致版本不兼容先卸载掉之前下载的版本 cnpm uninstall webpack-cli -g cnpm install webpack-cli4.9.2 -g 最后检查版本是否对应

嬴图Ultipa | 一文了解关于图数据库的一点儿干货

本篇包括以下内容点: 数据库主要技术分类 图是什么? 图的模式 图数据库 VS.关系型数据库 图数据库VS.其他NOSQL的对比 并非所有的图数据库都一样! 根据Gartner预测,“到2025年,使用图技术进行数据和分析创新…

8天长假快来了,Python分析【去哪儿旅游攻略】数据,制作可视化图表

目录 前言环境使用模块使用数据来源分析 代码实现导入模块请求数据解析保存 数据可视化导入模块、数据年份分布情况月份分布情况出行时间情况费用分布情况人员分布情况 前言 2023年的中秋节和国庆节即将来临,好消息是,它们将连休8天!这个长假…

node升级带来的问题及解决方案(digital envelope routines::unsupported)

由于项目需要将 node版本从16升级到了18,但是原有的老项目还是使用的16的环境,导致在运行老版本的时候出现错误 错误信息如下 Error: error:0308010C:digital envelope routines::unsupportedat new Hash (node:internal/crypto/hash:71:19)at Object.…

遇到 Binder这些面试题,你会怎么答?

作为开发人员,每个人都有每个人擅长领域,自然也有自己不擅长的领域,很难成为完美的一个全栈开发。在面试中最怕遇见的一件事是面试官专挑你不擅长的领域进行提问,目的就是看你遇到问题的应变能力。 接下给大家分享一个面试中容易被…

chorme调试移动端web页面

chorme本地调试页面方法: 手机开启开发者模式 iphone找不到开发者模式方法: 下载爱思助手,点击工具箱,找到虚拟定位,点击创建定位,确定 打开iphone的隐私与安全即可找到开发者模式,点击确定即可…

易混淆的符号

C自学精简教程 目录(必读) &符号在C中有多个含义。 下面我们列出常见的3种&#xff0c;你都能分得清吗&#xff1f; #include <iostream> using namespace std;//传递引用类型的参数 pass by reference void fun(int& a)//(1) 这里的 & 表示参数a是引用类…

远程管理通道安全SSH协议主机验证过程

可以使用SSH协议进行远程管理通道安全保护&#xff0c;其中涉及的主要安全功能包括主机验证、数据加密性和数据完整性保护。 这里要注意的是【主机验证】和【身份验证】的区别&#xff0c;主机验证是客户端确认所访问的服务端是目标访问对象&#xff0c;比如从从客户端A(192.16…