TypeScript 中,void 是一种表示“无返回值”的类型

TypeScript中的void类型表示"无返回值",主要用于函数返回类型。


它与undefined不同:void强调不应使用返回值,undefined则是具体值类型。


void函数可以不返回或仅return;,而undefined函数必须显式返回undefined。


void变量声明无实用价值,但常用于回调函数表示不关心返回值。


与never类型不同,void表示函数正常执行完毕但不返回值,never表示函数永不返回(如抛出异常或死循环)。


使用void能明确表达函数仅用于执行操作而非返回结果的设计意图。


在 TypeScript 中,void 是一种表示"无返回值"的类型。它通常用于函数的返回类型,表明该函数不会返回任何有意义的值。


1. void 基本用法

TypeScript 复制代码
function logMessage(message: string): void {
  console.log(message);
  // 没有 return 语句,或 return;(不带值)
}
  • 上面的函数 logMessage 不返回任何值,因此其返回类型是 void
  • 如果你尝试返回一个值(比如 return "hello";),TypeScript 会报错。

2. voidundefined 的区别

  • 在 JavaScript 中,没有显式返回值的函数实际上会返回 undefined
  • 但在 TypeScript 中,void 类型更强调"不应该使用返回值 ",而 undefined 是一个具体的值类型。
TypeScript 复制代码
function f1(): void {
  // 合法
}

function f2(): undefined {
  return undefined; // 必须显式返回 undefined
}

注意:在严格模式下,不能将 void 类型赋值给其他类型(如 let x: void = f1(); 虽然合法,但 x 几乎无法使用)。


3. 实际使用中的注意事项

  • 不要将 void 用于变量声明(除非特殊情况):
TypeScript 复制代码
let unusable: void = undefined; // 技术上可行,但没实际用途
  • 因为 void 只能被赋值为 undefined(在非严格模式下)或 null(如果启用了 --strictNullChecks 则只能是 undefined)。

  • 回调函数中常见 void

TypeScript 复制代码
function process(callback: () => void) {
  callback();
}
  • 这里表示 callback 不需要返回值(即使它返回了,调用方也不会使用)。

4. 与 never 的区别

  • void:函数执行完毕,但不返回值。
  • never:函数永远不会正常结束(例如抛出异常或无限循环)。
TypeScript 复制代码
function throwError(): never {
  throw new Error("Oops!");
}

function infiniteLoop(): never {
  while (true) {}
}

总结

类型 含义 典型场景
void 无返回值(可能隐式返回 undefined 日志、副作用函数
undefined 明确的未定义值 可选属性、初始化状态
never 永不返回 抛异常、死循环

使用 void 能让代码意图更清晰,告诉开发者:"这个函数是用来做事情的,不是用来获取结果的。"

相关推荐
Async Cipher14 小时前
TypeScript 的用法
前端·typescript
We་ct14 小时前
LeetCode 30. 串联所有单词的子串:从暴力到高效,滑动窗口优化详解
前端·算法·leetcode·typescript
刘联其19 小时前
封装一个完整的HttpClient.ts
前端·javascript·typescript
走粥20 小时前
TypeScript 泛型
开发语言·前端·javascript·windows·typescript
阿蒙Amon1 天前
TypeScript学习-第3章:复合类型
javascript·学习·typescript
踢球的打工仔2 天前
typescript-接口的基本使用(三)
前端·javascript·typescript
EndingCoder2 天前
TypeScript 最新特性:跟踪版本更新
开发语言·前端·javascript·typescript
止观止2 天前
重新认识 TypeScript:不仅仅是“带类型的 JS”
javascript·typescript
jiayong232 天前
Vue 3 面试题 - TypeScript 与工程化
前端·vue.js·typescript
We་ct2 天前
LeetCode 3. 无重复字符的最长子串:滑动窗口最优解演进与解析
前端·算法·leetcode·typescript