首页/新闻资讯/正文详情

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

发布时间:2026/9/25 9:53:31 来源:云帆数科 栏目:资讯中心
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),仅供参考

相关推荐

CSRF跨站请求伪造原理、绕过与靶场实战:DVWA与Pikachu通关指南
CSRF跨站请求伪造原理、绕过与靶场实战:DVWA与Pikachu通关指南

很多搞Web开发的朋友第一次看到“安全提示:疑似跨站请求伪造,访问已被禁止。错误编号【ese0102001】”这种页面时,大概率是懵的。明明自己在后台点了个按钮,或者在前端页面提交了一个表单,结果直接被拦截,业务都断了。… · 2026/9/25 9:53:31

LMFlow 位置插值(Position Interpolation)实战指南:为 LLaMA 模型扩展上下文长度的 Linear 与 NTK RoPE 缩放
LMFlow 位置插值(Position Interpolation)实战指南:为 LLaMA 模型扩展上下文长度的 Linear 与 NTK RoPE 缩放

人工智能大模型微调模型评测强化学习多模态 【免费下载链接】LMFlow An Extensible Toolkit for Finetuning and Inference of Large Foundation Models. Large Models for All. 项目地址: https://gitcode.com/gh_mirrors/lm/LMFlow 点击查看 免费下载 位置插值&a… · 2026/9/25 9:53:25

保姆级 OpenClaw 部署教程:Windows 可视化安装启动全步骤拆解(TaoToken 统一 Key 接入版)
保姆级 OpenClaw 部署教程:Windows 可视化安装启动全步骤拆解(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/25 9:53:25

xberg C FFI 插件管理实践:xberg_list_validators 列出已注册验证器的完整实现解析
xberg C FFI 插件管理实践:xberg_list_validators 列出已注册验证器的完整实现解析

后端AI 应用NLP 【免费下载链接】xberg Polyglot document intelligence with a Rust core: extract text, metadata, images, tables, and structured data from 106 formats across 140 file extensions, plus code intelligence for 371 languages. Fifteen bindings, with … · 2026/9/25 10:18:46

开源代码审查新范式:CLI+Git Diff+LLM Agent协同实践
开源代码审查新范式:CLI+Git Diff+LLM Agent协同实践

1. 这不是另一个“代码审查工具”,而是一套可落地的开源协作新范式“open-code-review”这个词,最近在开发者 Slack 群、GitHub Trending 和内部技术分享会上出现频率陡增——但它绝不是又一个带 UI 的 PR 检查插件,也不是把 ChatGPT 套个壳扔… · 2026/9/25 10:18:40

OpenCV contrib 像素强度图像配准模块(reg)完全指南:基于 Szeliski 直接对齐法的 Map 与 Mapper 体系
OpenCV contrib 像素强度图像配准模块(reg)完全指南:基于 Szeliski 直接对齐法的 Map 与 Mapper 体系

计算机视觉图像处理机器学习 【免费下载链接】opencv_contrib 项目地址: https://gitcode.com/gh_mirrors/ope/opencv_contrib 点击查看 免费下载 本篇技术指南围绕 opencv_contrib 仓库中的 modules/reg/README.md 及其配套源码展开,系统讲解 OpenCV 参… · 2026/9/25 10:18:22

TypeDoc 中 @packageDocumentation 标签详解:为 TypeScript 源文件添加模块级文档
TypeDoc 中 @packageDocumentation 标签详解:为 TypeScript 源文件添加模块级文档

开发工具文档 【免费下载链接】typedoc Documentation generator for TypeScript projects. 项目地址: https://gitcode.com/gh_mirrors/ty/typedoc 点击查看 免费下载 本文以 TypeDoc 官方文档中 packageDocumentation 标签页为核心,系统讲解该 TSDoc … · 2026/9/25 10:18:22

Copilot时代的程序员:用TaoToken统一Key管理这5个能力比写代码更重要
Copilot时代的程序员:用TaoToken统一Key管理这5个能力比写代码更重要

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

学生党实测:用 TaoToken 统一 Key 接入 DeepSeek 与豆包做论文写作辅助的配置清单
学生党实测:用 TaoToken 统一 Key 接入 DeepSeek 与豆包做论文写作辅助的配置清单

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

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

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

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

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

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

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

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码