TypeScript的never类型的妙用

never类型介绍

在 TypeScript 中,"never" 是一个表示永远不会发生的值类型。

使用场景

"never" 类型通常用于以下几种情况:

1、函数返回类型:当一个函数永远不会返回任何值(比如抛出异常或者无限循环),可以将其返回类型标注为 "never"。

TypeScript 复制代码
function throwError(message: string): never {
    throw new Error(message);
}

2、死循环:如果一个函数包含无限循环,可以使用 "never" 类型来标记它的返回类型。

TypeScript 复制代码
function infiniteLoop(): never {
    while (true) {
    }
}

3、类型保护:在类型检查中,"never" 类型可以用于细化其他类型。例如,当使用类型保护时,可以使用 "never" 排除某些可能性。

TypeScript 复制代码
type Method = 'GET' | 'POST';
function request(url: string, method: Method) {
    if (method === 'GET'){
        method;
    }
    else if (method === 'POST'){
        method;
    }
    else {
        const n: never = method;
    }
}

假如后来有一天你修改了 Method 的类型:

TypeScript 复制代码
type Method = 'GET' | 'POST' | 'PUT';

然而你忘记同时修改 request 方法中的控制流程,这时候 else 分支的 method 类型就会产生一个编译错误。

然后我们仅添加一个else if分支就可以解决该编译错误

TypeScript 复制代码
type Method = 'GET' | 'POST' | 'PUT';
function request(url: string, method: Method) {
    if (method === 'GET'){
        method;
    }
    else if (method === 'POST'){
        method;
    }
    else if (method === 'PUT'){
        method;
    }
    else {
        const n: never = method;
    }
}

通过这个方式,我们可以得出一个结论:使用 never 避免出现新增了联合类型没有对应的实现,目的就是写出类型绝对安全的代码。

与 void 的差异

在 TypeScript 中,void 和 never 之间的区别如下:

  • void:表示没有任何类型。通常用于标识函数没有返回值或一个表达式的值为 undefined 或 null。void 类型在非严格模式下允许被赋值为 null 或 undefined。
  • never:表示永远不存在的值的类型。通常用于表示函数永不返回(比如抛出异常)或一个表达式永远不会有结果。never 类型不能被赋值为任何类型,除了 never 本身。

综上所述,void 表示没有任何类型,可以包括 undefined 或 null,而 never 表示永远不存在的值,通常表示函数永不返回或某些异常情况。

相关推荐
知了清语4 分钟前
使用 codex + GPT 5.4 分析已实现的 数据看板
前端
qq_120840937118 分钟前
Three.js 工程向:相机控制与交互手感调优(OrbitControls)
前端·javascript·orbitcontrols
疯狂的魔鬼18 分钟前
从 5 个 Hooks 到注册表模式:Vue 3 复杂详情页的架构演进与原则沉淀
前端·架构
enoughisenough22 分钟前
WEB网络通信
前端
We་ct41 分钟前
LeetCode 300. 最长递增子序列:两种解法从入门到优化
开发语言·前端·javascript·算法·leetcode·typescript
深海鱼在掘金41 分钟前
Next.js从入门到实战保姆级教程(第一章):导读——建立 Next.js 的认知框架
前端·typescript·next.js
渔舟小调43 分钟前
P17 | 管理台动态路由:后端返回菜单树,前端运行时注入
前端
小徐_23331 小时前
uni-app 组件库 Wot UI 2.0 发布了,我们带来了这些改变!
前端·微信小程序·uni-app
❀͜͡傀儡师1 小时前
Claude Code 官方弃用 npm 安装方式:原因分析与完整迁移指南
前端·npm·node.js·claude code
知识分享小能手1 小时前
ECharts入门学习教程,从入门到精通,ECharts高级功能(6)
前端·学习·echarts