在 TypeScript 中,never
类型表示那些永远不会发生的类型。它通常用来表示以下情况:
- 函数的返回类型:如果一个函数永远不会返回(例如抛出异常或进入无限循环),可以将其返回类型标注为
never
。
function throwError(message: string): never {
throw new Error(message);
}
function infiniteLoop(): never {
while (true) {
// 无限循环
}
}
- switch 语句的 exhaustive 检查:当针对某个可枚举类型的变量进行 switch 语句时,使用
never
类型可以确保所有可能的情况都被覆盖,避免遗漏情况。
type Color = "Red" | "Green" | "Blue";
function getColorValue(color: Color): number {
switch (color) {
case "Red":
return 1;
case "Green":
return 2;
case "Blue":
return 3;
default:
const exhaustiveCheck: never = color; // 当所有情况都已处理时,这里的值不会被赋值到
throw new Error(`Unhandled color: ${exhaustiveCheck}`);
}
}
never
类型是一种特殊的底层类型,它是所有其他类型的子类型,但没有任何类型是 never
的子类型或可以赋值给 never
类型。因此,当 TypeScript 推断出某个表达式的类型为 never
时,通常表示出现了类型错误或不可到达的代码路径。