请求解析TypeScript never类型的适用场景与使用时机
TypeScript
never 类型的实用场景与时机 never 是TypeScript里最“极端”的类型——它代表永远不会存在的值,或者说“不可能发生的情况”。下面结合实际代码,讲清楚它的核心用法:
1. 永远不会返回的函数
如果一个函数永远不会执行完(要么无限循环,要么抛出错误终止),它的返回值类型就是never。
- 无限循环的函数:
function infiniteLoop(): never { while (true) { console.log("一直在跑..."); } }
这类函数没有任何返回的可能,用never标注返回类型比void更准确(void表示函数执行完但没返回值,而never是函数根本不会执行完)。
- 抛出错误的函数:
function throwError(message: string): never { throw new Error(message); }
比如全局的错误处理函数,调用后直接终止程序,不会有返回值,用never能明确传达这个语义。
2. 联合类型的穷尽检查(最常用场景)
当你处理一个联合类型时,用never可以强制编译器帮你检查:所有可能的类型分支都被覆盖了,避免遗漏情况。
比如有一个联合类型的枚举:
type Fruit = "apple" | "banana" | "orange"; function getFruitPrice(fruit: Fruit): number { switch (fruit) { case "apple": return 5; case "banana": return 3; case "orange": return 4; // 如果漏掉某个Fruit分支,编译器会直接报错 default: // 用never标记这个分支“理论上不可能走到” const _exhaustiveCheck: never = fruit; throw new Error(`未知水果:${_exhaustiveCheck}`); } }
如果后续给Fruit新增类型(比如"grape"),编译器会立刻在default处报错,因为fruit无法赋值给never,提醒你必须新增对应的case分支。这是never在类型安全上最实用的地方。
3. 类型守卫的兜底逻辑
在使用typeof、instanceof等类型守卫后,用never处理那些“理论上不可能出现”的类型分支,确保类型判断没有遗漏。
type Value = string | number | boolean; function handleValue(value: Value): void { if (typeof value === "string") { console.log("字符串:", value); } else if (typeof value === "number") { console.log("数字:", value); } else if (typeof value === "boolean") { console.log("布尔值:", value); } else { // 这里的value类型是never,说明前面的类型守卫已覆盖所有可能 const _unreachable: never = value; throw new Error(`无法处理的类型:${_unreachable}`); } }
如果以后Value新增类型(比如null),编译器会在else处报错,强制你补充对应的处理逻辑。
4. 标记不可能的状态
在状态机这类场景中,用never标记那些“不应该出现”的状态,避免非法状态被遗漏处理。
type OrderStatus = "pending" | "paid" | "shipped"; function updateOrderStatus(status: OrderStatus): void { switch (status) { case "pending": console.log("处理待支付订单"); break; case "paid": console.log("处理已支付订单"); break; case "shipped": console.log("处理已发货订单"); break; default: const _invalidStatus: never = status; throw new Error(`无效订单状态:${_invalidStatus}`); } }
一旦有非法状态传入(比如后端返回未定义的"cancelled"),编译器会提前发现问题,运行时也能抛出明确错误。
内容的提问来源于stack exchange,提问作者Syed Abu Hanifah Bin Syed Azmi
相关产品推荐
相关产品推荐

