fe-interview icon indicating copy to clipboard operation
fe-interview copied to clipboard

[TypeScript] 第1510天 在TypeScript中never与void有什么区别?

Open haizhilin2013 opened this issue 2 years ago • 2 comments

第1510天 在TypeScript中never与void有什么区别?

3+1官网

我也要出题

haizhilin2013 avatar Jun 03 '23 20:06 haizhilin2013

void 表示没有任何类型。通常用于标识函数的返回值类型,表示该函数没有返回值。也可以用于变量,表示该变量没有类型。

never 表示永远不会发生的值的类型。通常用于标识抛出异常、无限循环或总是会抛出错误的函数的返回值类型。也可以用于标识永远不会有返回值的函数。

hemengzhao avatar Sep 26 '23 02:09 hemengzhao

让我解释一下 voidnever 类型的区别:

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 则多用于类型检查和类型系统中的更高级特性。

llccing avatar Jun 26 '24 06:06 llccing