TypeScript 中 never 和 void 的区别

简介: TypeScript 中 never 和 void 的区别

在 TypeScript 中,nevervoid 都是用来表示函数的返回类型或表达式的类型,但有着不同的含义。

void 表示函数没有返回值,也可以用作变量的类型,表示变量不接收任何值。在函数中,void 表示函数没有返回任何值,即函数执行完毕后没有返回值。

function logMessage(message: string): void {
  console.log(message);
}
let result: void = undefined;  // 变量 result 的类型为 void,只能赋值为 undefined 或 null

never 表示函数永远不会返回值,或者表达式总是产生一个异常或无限循环。通常用于标识永远不会执行完的函数的返回类型。一些例子包括抛出异常、无限循环或处理类型错误的断言。

// 永远不会返回值的函数
function throwError(message: string): never {
  throw new Error(message);
}
// 无限循环函数
function infiniteLoop(): never {
  while (true) {
    // 无限循环
  }
}
// 类型断言,告诉编译器这个函数不会返回
function assertNever(x: never): never {
  throw new Error("Unexpected object: " + x);
}
// 使用 assertNever 处理类型错误
function processValue(value: string | number) {
  if (typeof value === "string") {
    // 处理字符串类型
  } else if (typeof value === "number") {
    // 处理数字类型
  } else {
    assertNever(value);  // 类型错误,抛出异常
  }
}

在使用 never 类型时,编译器会根据代码分析来确保所有可能的情况都已经处理,否则会报错。这使得我们能够在编译阶段捕获可能存在的错误。

相关文章
|
5月前
|
JavaScript 安全
8.【TypeScript 教程】Never 与 Unknown
8.【TypeScript 教程】Never 与 Unknown
37 3
|
6月前
|
JavaScript 前端开发 开发者
JavaScript(JS)和TypeScript(TS)的区别
JavaScript(JS)和TypeScript(TS)的区别
119 0
|
6月前
|
JavaScript
Typescript中 interface 和 type 的区别是什么?
在 TypeScript 中,interface 和 type 都用于定义类型,但它们有一些区别。
180 0
|
6月前
|
JavaScript 安全
TypeScript中any unkown never的区别
TypeScript中any unkown never的区别
|
6月前
|
JavaScript
TypeScript中Never类型和类型断言
TypeScript中Never类型和类型断言
|
JavaScript 前端开发 编译器
对 typescript 的理解?与 javascript 的区别?
对 typescript 的理解?与 javascript 的区别?
86 1
|
JavaScript 前端开发 编译器
TypeScript 深度剖析:TypeScript 的理解?与 JavaScript 的区别?
TypeScript 深度剖析:TypeScript 的理解?与 JavaScript 的区别?
172 0
|
JavaScript 编译器
TypeScript深度剖析:TypeScript 中命名空间与模块的理解?区别?
TypeScript深度剖析:TypeScript 中命名空间与模块的理解?区别?
120 0
|
JavaScript 前端开发 编译器
TypeScript深度剖析: TypeScript 中函数的理解?与 JavaScript 函数的区别?
TypeScript深度剖析: TypeScript 中函数的理解?与 JavaScript 函数的区别?
116 0
|
JavaScript 前端开发
TypeScript中字符串枚举和联合类型的区别
在 TypeScript 中,字符串枚举和联合类型是用来表示一组相关值的两种不同方法。
149 0