fe-interview
fe-interview copied to clipboard
[TypeScript] 第1510天 在TypeScript中never与void有什么区别?
void 表示没有任何类型。通常用于标识函数的返回值类型,表示该函数没有返回值。也可以用于变量,表示该变量没有类型。
never 表示永远不会发生的值的类型。通常用于标识抛出异常、无限循环或总是会抛出错误的函数的返回值类型。也可以用于标识永远不会有返回值的函数。
让我解释一下 void 和 never 类型的区别:
void
void 类型通常用于表示一个函数没有返回值。它主要用于函数的返回类型声明,表示函数执行后不会返回任何值。例如:
function logMessage(message: string): void {
console.log(message);
}
在这个例子中,logMessage 函数的返回类型是 void,这意味着函数没有返回值。
虽然 void 类型在变量声明中也可以使用,但它几乎没有实际意义,因为一个 void 类型的变量只能赋值为 undefined。例如:
let unusable: void = undefined;
never
never 类型表示那些永远不会有返回值的函数。也就是说,这些函数要么抛出异常,要么根本不会结束执行(例如无限循环)。never 类型通常用于表示不可能发生的情况。例如:
function throwError(message: string): never {
throw new Error(message);
}
function infiniteLoop(): never {
while (true) {}
}
在这些例子中,throwError 函数抛出了一个错误,永远不会返回;infiniteLoop 函数是一个无限循环,也永远不会返回。
总结
void用于表示一个函数没有返回值。never用于表示一个函数永远不会返回(例如抛出异常或无限循环)。
这两者在实际编程中的用途不同,void 更常用于普通函数,而 never 则多用于类型检查和类型系统中的更高级特性。