never never 类型

最后更新:2026-10-22

never never 类型

never 表示"永远不会有值":抛错或死循环的函数返回它;在类型层它是所有类型的子类型,最出名的用法是 switch 穷尽检查。

分组基础类型
类型类型
严格模式不需要

ℹ️ 说明 编辑器将 TypeScript 转译为 JavaScript 后运行(不做类型检查);类型检查结果见示例 Output。

📝 语法

function fail(msg: string): never {
  throw new Error(msg);
}
// 穷尽检查:default 分支把漏掉的 case 变成编译错误
type Shape = Circle | Square;

⚙️ 参数

(): never只允许 throw、死循环或调用另一个 never 函数——正常 return 会报错

返回值:never 本身就是"返回类型":表示函数永远不会正常返回(抛错、终止进程或死循环)。

▶ 示例

修改下面的代码,点击试一试查看转译运行结果:

输出:

caught: disk full

(转译后运行输出;在 fail 里写 return 1 会得到编译错误——never 函数不能正常返回)

💡 要点

ℹ️ 说明 never 是所有类型的子类型,但没有任何值能赋给 never——连 any 都不行,它是"空集"类型。
💡 提示 穷尽检查套路:switch 的 default 里写 const _exhaustive: never = value。新增联合分支而忘记处理时,这里立刻编译报错(见 exhaustive-checks)。
⚠️ 注意 never 与 void 都"不返回东西",含义完全不同:void 是正常结束但没有返回值,never 是根本不会正常结束。
更多案例即将上线。

📚 相关教程

❓ 常见问题

Q never 和 void 的区别?
A void:函数正常执行完毕,只是没有返回值(如日志)。never:函数根本不会正常返回(抛错/死循环),或类型上不存在值。
Q never 有什么实际用途?
A 两大用途:标注抛错/终止函数;穷尽检查——在 switch default 里把收窄成 never 的联合值赋给 never 变量,漏分支即编译报错。条件类型里也用 never 过滤成员。
Q 为什么我的变量类型变成了 never?
A 通常是收窄过头:比如判断了所有可能分支后剩余类型为空,或对不可达代码做了操作。检查控制流分析给出的剩余类型,往往是某分支条件写重了。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏