Skip to content

Typescript中never 和 void 的区别?

参考答案:

nevervoid 都是用来表示函数的返回类型,但它们有着不同的含义和用途。

下面是两者的区别和使用场景:

1. void

void 类型表示函数没有返回值,通常用于那些没有返回值的函数。可以把它看作是函数的“空”类型,表示该函数执行完毕后没有任何结果返回。

用法:

  • 函数没有返回值时: 当一个函数没有返回任何内容时,我们通常会将其返回类型设置为 void

    typescript
    function logMessage(message: string): void {
      console.log(message);
    }

    这里的 logMessage 函数没有返回任何值,因此它的返回类型是 void

  • voidundefined 的区别

    • void 表示没有返回值,而 undefined 是一个实际的值,表示变量未被赋值。
    • void 类型的函数中,返回 undefined 或不返回任何内容都是允许的,但不能返回其他类型的值。
    typescript
    function example(): void {
      // 可以返回 `undefined`,也可以不返回任何值
      return undefined;
    }

总结:

  • void 用于表示函数没有返回值。
  • void 并不是说函数没有任何副作用,它只是指示该函数不返回任何值。

2. never

never 类型表示从不返回的函数,即这些函数无法正常结束,它们要么会抛出错误,要么会进入无限循环。因此,never 类型表示一个函数永远不会返回。

用法:

  • 抛出错误的函数: 如果一个函数总是抛出错误并且没有正常的返回值(即它的执行会被终止),它的返回类型应该是 never

    typescript
    function throwError(message: string): never {
      throw new Error(message);
    }

    这个 throwError 函数抛出一个错误,因此它的返回类型是 never

  • 无限循环的函数: 如果一个函数进入一个无限循环,也不返回任何东西,它的返回类型也应该是 never

    typescript
    function infiniteLoop(): never {
      while (true) {
        // 无限循环
      }
    }

    由于 infiniteLoop 函数会永远执行下去,永远不会返回,它的返回类型是 never

总结:

  • never 类型用于表示那些不会正常返回的函数,通常是因为它们会抛出异常或进入无限循环。
  • never 强调了函数的不可达性,即函数不会正常结束。

3. voidnever 的区别总结

特性voidnever
定义表示没有返回值的函数。表示永远不会返回的函数,通常用于抛出异常或进入无限循环。
返回值可以返回 undefined,也可以不返回任何值。不能返回任何值,通常抛出异常或进入无限循环。
用法场景用于没有返回值的函数,如事件处理函数。用于那些无法正常返回的函数,如抛出错误的函数或无限循环函数。
示例function log(): void { console.log('Hello'); }function throwError(): never { throw new Error('Error'); }

题目要点:

  • void 表示函数没有返回值,允许函数返回 undefined 或不返回任何内容。
  • never 表示函数不会正常返回,通常是因为它抛出了异常或进入了无限循环,意味着函数的执行不会终止并且不会返回任何值。