新闻详情

新闻详情

首页 / 资讯中心 / 详情

The Concise TypeScript Book:深入理解 `never` 类型与穷尽性检查

发布时间:2026/9/26 11:53:23来源:尧图网络
The Concise TypeScript Book:深入理解 `never` 类型与穷尽性检查
文档教程【免费下载链接】typescript-bookThe Concise TypeScript Book: A Concise Guide to Effective Development in TypeScript. Free and Open Source.项目地址https://gitcode.com/gh_mirrors/typ/typescript-book点击查看免费下载导读never是 TypeScript 类型系统中一个容易误解却极具价值的内置类型它表示永远不会发生的值。在 The Concise TypeScript Book 中never被用于标注永不返回的函数如无限循环、抛错函数并配合控制流分析实现穷尽性检查exhaustiveness checking让编译器在新增联合类型成员时立即报错。读完本文你将掌握never的定义、三处典型用法、它与void/unknown的区分以及如何用它守住联合类型的最后一公里。一、never是什么永不出现的值根据原文档定义never类型代表永远不会出现的值values that never occur。它被用来标注永不返回或必然抛出错误的函数与表达式。把它放到类型系统集合论视角下看会更直观。仓库中的 exploring-the-type-system.md 将每种类型看作一个集合并给出对应表集合术语TypeScript说明空集Empty setnevernever中不包含除它自身之外的任何值单元素集undefined/null/ 字面量类型例如type X X有限集boolean/ 联合类型如up \| down无限集string/number/object全集Universal setany/unknownany包含每个元素unknown是any的类型安全版因此从集合视角看never就是空集 ∅没有任何值属于never反过来它也永远装不下任何值。这正是下面所有行为不可赋值、穷尽性检查的根基。二、三种典型用法永不返回、抛错与不可达分支2.1 标注永不返回的函数无限循环原文档给出的第一个示例是用never标注永不返回的无限循环函数const infiniteLoop (): never { while (true) { // do something } };由于while (true)永远不会结束函数不可能正常返回因此返回类型不能是voidvoid表示没有返回值但会返回而必须是never。2.2 标注必然抛错的函数第二个示例是抛出错误的函数const throwError (message: string): never { throw new Error(message); };throw语句会中断控制流函数同样永不返回所以返回类型标注为never是准确的。这也是 built-in-type-primitives.md 中对never的官方描述Typically used as the return type of functions that throw an error or enter an infinite loop典型用于抛错或进入无限循环的函数返回类型。2.3 类型收窄后的不可达分支在 the-never-type.md 中仓库展示了另一个重要场景当变量被收窄narrowing到不可能再有任何值时编译器会把它推断为neverconst printValue (val: string | number) { if (typeof val string) { console.log(val.toUpperCase()); } else if (typeof val number) { console.log(val.toFixed(2)); } else { // val 在这里的类型是 never // 因为除了 string 或 number它不可能是其他任何值 const neverVal: never val; console.log(Unexpected value: ${neverVal}); } };这是类型收窄narrowing与 control-flow-analysis.md 共同作用的结果控制流分析会沿着if/else if/else逐步缩小变量的类型域当所有可能分支都被覆盖后else分支里的变量类型域成为空集编译器便将其推断为never。三、穷尽性检查让联合类型增员即报错never最有实战价值的用法是配合switch语句实现穷尽性检查exhaustiveness checking。仓库的 exhaustiveness-checking.md 给出了标准范式type Direction up | down; const move (direction: Direction) { switch (direction) { case up: console.log(Moving up); break; case down: console.log(Moving down); break; default: const exhaustiveCheck: never direction; console.log(exhaustiveCheck); // 这一行永远不会被执行 } };这段代码的价值在于可维护性如果未来有人给Direction增加一个新成员例如left而switch中没有对应case那么default分支里direction的类型就不再是never而是left。此时const exhaustiveCheck: never direction这行赋值会触发编译错误——Type left is not assignable to type never——从而在编译期就提醒开发者补全新分支。这与原文档 never-type.md 中的示例一致其default分支同样借助const exhaustiveCheck: never direction;来兜底二者共同构成了本书对穷尽性检查的完整讲解。四、区分易混淆类型nevervsvoidvsunknown理解never需要把它和相近类型区分开类型含义典型场景never空集值永不出现无限循环、抛错函数、穷尽性检查void没有返回值但函数会正常返回事件处理器、无返回值的函数unknown任意值但使用前必须收窄外部输入、JSON 解析结果any任意值放弃类型检查迁移期兜底不推荐关于赋值方向的细节exploring-the-type-system.md 给出了关键事实let f: never; f 1; // Invalid没有任何东西可以赋给 never即一切类型都可以赋给any/unknown但没有任何值可以赋给nevernever只可赋给它自身与any。同时仓库提醒启用strictNullChecks后null与undefined的行为类似于void未启用时它们的行为则类似于never。五、延伸阅读never是本书类型系统章节体系的一部分建议按以下顺序结合阅读类型收窄Narrowingtypeof、真值判断、switch、in、instanceof等收窄手段是never推断的前提控制流分析Control Flow Analysis理解编译器如何沿分支收窄类型、推断never穷尽性检查Exhaustiveness Checkingnever在default分支中的标准用法联合类型Union Typenever常与联合类型搭配构成可穷尽的分支集合探索类型系统Exploring the Type System以集合论视角理解never作为空集的性质。小结never虽然装不下任何值却在 TypeScript 的类型安全体系中扮演关键角色它精确标注永不返回的函数揭示不可达分支并通过穷尽性检查把漏掉分支从运行时 bug 变成编译期错误。掌握never你就能为联合类型筑牢最后一道防线。赞分享文档教程【免费下载链接】typescript-bookThe Concise TypeScript Book: A Concise Guide to Effective Development in TypeScript. Free and Open Source.项目地址https://gitcode.com/gh_mirrors/typ/typescript-book点击查看免费下载相关推荐The Concise TypeScript Book 精读深入理解 never 类型与穷尽性检查The Concise TypeScript Book 精读深入理解 never 类型与穷尽性检查 never 类型是 TypeScript 类型系统中一个看文档教程The Concise TypeScript Book 精讲深入理解 never 类型与穷尽性检查实战The Concise TypeScript Book 精讲深入理解 never 类型与穷尽性检查实战 never 是 TypeScript 内置类型中最特殊文档教程The Concise TypeScript Book 中的 never 类型从空集合收窄到穷尽性检查The Concise TypeScript Book 中的 never 类型从空集合收窄到穷尽性检查 本篇围绕 The Concise TypeScript文档教程上一篇抖音批量下载神器一键获取无水印高清视频告别繁琐操作下一篇WAS Node Suite Load Image Batch节点架构解析状态管理与批量处理系统的实现原理与性能调优创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

AI会一本正经地胡说八道?——用RAG+RLHF+DPO给幻觉上三道锁,TaoToken统一Key实测 2026/9/26 11:53:15

AI会一本正经地胡说八道?——用RAG+RLHF+DPO给幻觉上三道锁,TaoToken统一Key实测

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
数学建模论文拆解四步法:从读到用的能力迁移指南 2026/9/26 11:53:15

数学建模论文拆解四步法:从读到用的能力迁移指南

1. 这不是“范文集”,而是一套可拆解、可复用的建模作战手册你有没有翻过那些被传得神乎其神的“国奖论文合集”?PDF文件名带着年份、学校、队号,点开一看——公式排版工整,图表精美,参考文献列了三十条,结…

阅读更多 →
移动云云主机实测:选型、搭建与避坑指南 2026/9/26 11:53:08

移动云云主机实测:选型、搭建与避坑指南

最近两三年,问“移动云云主机怎么样”的人明显多了起来。很多人第一次听说移动云,是因为运营商的推广电话,或者某个挺便宜的活动页面;也有人是在企业上云选型时,把移动云和几家头部云厂商摆在一起比价。但真到了注册、…

阅读更多 →
移动云云主机实测:选型配置、性能对比与避坑指南 2026/9/26 11:53:08

移动云云主机实测:选型配置、性能对比与避坑指南

移动云云主机到底怎么样?这句话我在后台收到过很多次。大概半年前,我为了一个内部分享项目,顺手买了一台移动云云主机,2核4G,不算高配,但前后跑了Nginx、MySQL、还有两个Python服务,也把Windows…

阅读更多 →
Spring Boot + 微信小程序:社区居民传染病防治系统开发实战 2026/9/26 11:53:08

Spring Boot + 微信小程序:社区居民传染病防治系统开发实战

1. 这套系统到底要解决什么问题 先说个我亲身经历的场景。去年秋天我接了个社区卫生服务中心的数字化改造项目,当时对方提的需求很简单——“我们要一个能报传染病的系统”。等坐到会议室里聊完才发现,他们要的不止是一张电子报表,而是一整套…

阅读更多 →
jsencrypt前端RSA加密实战:解决登录密码明文传输与uniapp兼容 2026/9/26 11:53:08

jsencrypt前端RSA加密实战:解决登录密码明文传输与uniapp兼容

简介:这是一份面向前端开发者的RSA加密解密工具包,专门解决在uniapp等环境中使用jsencrypt时报错的问题。资源提供了修改后的jsencrypt加密库文件,可在uni-app项目内正常引入,同时包含封装好的RSA工具文件,导出了加密&…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉