TypeScript:never vs void

TypeScript:never vs void

TypeScript 中的 nevervoid 两个关键词在类型系统中扮演着重要的角色,但是它们之间的区别常常让人感到困惑。

void:什么都没有

让我们先来了解一下 void 这个关键词。在 TypeScript 中,void 表示一个函数没有返回值,或者说函数返回值的类型是空的。如果一个函数被标注为 void,那么它在执行完毕后不会返回任何值。

让我们通过一个简单的例子来说明 void 的用法:

function sayHello(): void {
  console.log("Hello!");
}

const result: void = sayHello();
console.log(result);  // 输出:undefined

在上面的例子中,我们定义了一个 sayHello 函数,它不返回任何值(即 void)。当我们调用这个函数时,它会打印出 “Hello!”,但是由于函数没有返回值,所以 result 的值是 undefined

需要注意的是,我们可以将 void 类型赋值给其他类型的变量,但是反过来是不行的。这是因为 void 表示缺少值,它没有实际的值可以赋给其他类型。

never:永远不会返回

接下来,让我们来了解一下 never 这个关键词。在 TypeScript 中,never 表示一个函数永远不会返回。这意味着当一个函数被标注为 never 类型时,它要么会抛出一个异常,要么会进入一个无限循环,永远不会结束。

下面是一个使用 never 的例子:

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

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

在上面的例子中,throwError 函数抛出一个带有指定错误消息的异常。由于函数在抛出异常后不会继续执行,因此它的返回类型被标注为 never

infiniteLoop 函数则展示了一个无限循环的例子,它永远不会结束。这也是 never 类型的另一种常见用法。

需要注意的是,由于 never 表示函数永远不会返回,因此我们不能将 never 类型赋值给其他类型的变量,因为其他类型都有可能有实际的返回值。

区别对比

现在我们来总结一下 nevervoid 之间的区别。

  • void 表示函数没有返回值,或者说返回值类型是空的。
  • never 表示函数永远不会返回,要么抛出异常,要么进入无限循环。

简而言之,void 是函数可能有返回值但实际上没有返回值,而 never 则是函数根本不会有返回值。

实际应用场景

在实际的开发中,voidnever 经常用于不同的场景。下面我将介绍一些常见的应用场景,帮助大家更好地理解它们的用途。

void 的应用场景

  • 在 JavaScript 中,大多数函数都没有显式的返回值,因此在 TypeScript 中将它们标注为 void 类型是很常见的。
  • 当一个函数没有返回值,但是我们希望它执行完毕后进行一些副作用操作(比如打印日志、修改全局状态等)时,可以将其返回类型标注为 void

never 的应用场景

  • 在处理错误和异常情况时,我们常常会使用 never 类型。比如当一个函数遇到无法恢复的错误时,我们可以使用 never 类型来表示函数会抛出异常。
  • 当一个函数进入无限循环,或者是一个递归函数永远不会终止时,可以将其返回类型标注为 never

下面是一个使用 never 处理错误的例子:

function handleError(error: string): never {
  console.error("Error:", error);
  throw new Error(error);
}

try {
  // 执行一些可能抛出异常的操作
} catch (error) {
  handleError("Something went wrong!");
}

在上面的例子中,我们定义了一个 handleError 函数来处理错误。它首先会打印出错误消息,然后抛出一个带有错误消息的异常。由于函数抛出异常后不会继续执行,因此它的返回类型被标注为 never

总结

  • void 表示函数没有返回值,或者说返回值类型是空的。
  • never 表示函数永远不会返回,要么抛出异常,要么进入无限循环。
  • void 用于标注函数没有实际返回值的情况,而 never 用于表示函数根本不会有返回值。

示例代码仅用于说明概念,可能不符合最佳实践。在实际开发中,请根据具体情况进行调整。

原文链接:https://juejin.cn/post/7245541931752489018 作者:ShihHsing

(0)
上一篇 2023年6月18日 上午11:02
下一篇 2023年6月18日 上午11:12

相关推荐

发表回复

登录后才能评论