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

在TypeScript中,nevervoid 是两种特殊的类型,它们有各自独特的用途和含义。

  1. void 类型

void 类型通常用于表示没有返回值的函数。在JavaScript中,如果一个函数没有明确的返回值,它实际上会返回 undefined。在TypeScript中,我们可以使用 void 类型来表示这种情况。例如:

function logMessage(message: string): void {
    console.log(message);
    // 这个函数没有返回值,所以它的返回类型是 void
}

注意,虽然 void 类型的函数不能返回任何值,但它们的返回值实际上是 undefined。这意味着以下代码在TypeScript中是合法的:

const result: void = undefined; // 合法,因为 void 实际上是 undefined 的一个更严格的版本

但是,你不能将 void 类型的变量赋值为除 undefined 之外的其他值。

  1. never 类型

never 类型表示的是那些永远不会有返回值的函数的返回类型。这听起来可能有点抽象,但实际上它非常有用。一个典型的例子是那些总是抛出错误的函数:

function throwError(message: string): never {
    throw new Error(message);
    // 这个函数永远不会返回,所以它的返回类型是 never
}

因为 throwError 函数总是会抛出一个错误,所以它永远不会返回一个值。这就是我们使用 never 类型的原因。

另一个使用 never 的场景是在类型守卫中,特别是当你有一个永远不会匹配的条件时。例如:

function checkType(value: number | string): string {
    if (typeof value === 'number') {
        return value.toString();
    } else if (typeof value === 'string') {
        return value;
    } else {
        // 这个分支永远不会执行,因为我们已经覆盖了所有可能的类型
        // 但为了类型安全,我们可以使用一个 never 类型的返回值来表示这一点
        const neverValue: never = ((value: never) => { throw new Error() })(value);
        return neverValue; // 这行代码实际上永远不会执行,但它有助于类型检查器理解代码的逻辑结构
    }
}

请注意,上面的示例中的最后一个 else 分支实际上永远不会执行,因为我们已经通过前面的条件覆盖了所有可能的类型。但是,通过在该分支中使用一个返回 never 类型的表达式,我们可以向TypeScript的类型检查器提供额外的信息,以帮助它更好地理解代码的逻辑结构。不过在实际开发中,你通常会省略这个永远不会执行的分支,并依赖TypeScript的类型推断来处理这种情况。

总结

  • void 类型用于表示没有返回值的函数,这些函数实际上返回 undefined
  • never 类型用于表示那些永远不会有返回值的函数的返回类型,通常用于总是抛出错误的函数或永远不会执行的代码路径。
posted @   王铁柱6  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示