在 TypeScript 中,never
和 void
都是用来表示函数的返回类型或表达式的类型,但有着不同的含义。
void
表示函数没有返回值,也可以用作变量的类型,表示变量不接收任何值。在函数中,void
表示函数没有返回任何值,即函数执行完毕后没有返回值。
function logMessage(message: string): void { console.log(message); } let result: void = undefined; // 变量 result 的类型为 void,只能赋值为 undefined 或 null
never
表示函数永远不会返回值,或者表达式总是产生一个异常或无限循环。通常用于标识永远不会执行完的函数的返回类型。一些例子包括抛出异常、无限循环或处理类型错误的断言。
// 永远不会返回值的函数 function throwError(message: string): never { throw new Error(message); } // 无限循环函数 function infiniteLoop(): never { while (true) { // 无限循环 } } // 类型断言,告诉编译器这个函数不会返回 function assertNever(x: never): never { throw new Error("Unexpected object: " + x); } // 使用 assertNever 处理类型错误 function processValue(value: string | number) { if (typeof value === "string") { // 处理字符串类型 } else if (typeof value === "number") { // 处理数字类型 } else { assertNever(value); // 类型错误,抛出异常 } }
在使用 never
类型时,编译器会根据代码分析来确保所有可能的情况都已经处理,否则会报错。这使得我们能够在编译阶段捕获可能存在的错误。