TypeScript中 never和void类型:永不返回与无返回值

303 阅读2分钟

TypeScript是JavaScript的超集,引入了强大的类型系统,其中的nevervoid是两个看似相似但具有不同用途的类型。本文将详细讨论它们之间的区别,并提供示例来帮助理解它们的作用。

什么是never?

never是TypeScript中的一个特殊类型,表示函数永远不会返回值或抛出异常。它通常用于以下情况:

  1. 函数内部抛出异常:


// 代码

function throwError(message: string): never {

  throw new Error(message);

}

在上面的示例中,throwError函数永远不会正常返回,因为它总是抛出一个异常。

  1. 无限循环:


// 代码

function infiniteLoop(): never {

  while (true) {

    // 无限循环

  }

}

infiniteLoop函数也永远不会返回,因为它进入了一个无限循环。

什么是void?

void表示函数不会返回任何值。它通常用于标识没有返回值的函数:


// 代码

function logMessage(message: string): void {

  console.log(message);

}

在上面的示例中,logMessage函数不返回任何值,它仅仅打印消息到控制台。

区别和示例

为了更清晰地理解nevervoid的区别,让我们看一些示例:

never示例:

// 代码

function throwError(message: string): never {

  throw new Error(message);

}

  


function infiniteLoop(): never {

  while (true) {

    // 无限循环

  }

}

  


const result: never = throwError("Something went wrong"); // 正确

const loopResult: never = infiniteLoop(); // 正确

const errorMessage: string = throwError("Error"); // 错误,类型不匹配

void示例:

// 代码

function logMessage(message: string): void {

  console.log(message);

}

  


const result: void = logMessage("Hello, TypeScript"); // 正确

const errorMessage: string = logMessage("Error"); // 错误,类型不匹配

在这个示例中,result的类型是void,因为它是logMessage函数的调用结果。尝试将result赋值给errorMessage也会导致类型错误,因为void不能赋值给其他类型。

总结

在TypeScript中,nevervoid都用于表示函数的返回值,但它们有不同的含义和用途。never表示函数永不返回或抛出异常,而void表示函数没有返回值。