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 能让代码意图更清晰,告诉开发者:"这个函数是用来做事情的,不是用来获取结果的。"

相关推荐
时光不负努力5 小时前
编程常用模式集合
前端·javascript·typescript
时光不负努力5 小时前
ts+vue3开发规范
vue.js·typescript
时光不负努力5 小时前
typescript常用的dom 元素类型
前端·typescript
时光不负努力6 小时前
TS 常用工具类型
前端·javascript·typescript
Wect1 天前
LeetCode 210. 课程表 II 题解:Kahn算法+DFS 双解法精讲
前端·算法·typescript
mCell1 天前
从零构建一个 Mini Claude Code:面向初学者的 Agent 开发实战指南
typescript·agent·claude
敲敲敲敲暴你脑袋1 天前
写个添加注释的vscode插件
javascript·typescript·visual studio code
Wect1 天前
LeetCode 207. 课程表:两种解法(BFS+DFS)详细解析
前端·算法·typescript
昨晚我输给了一辆AE862 天前
为什么现在不推荐使用 React.FC 了?
前端·react.js·typescript
Wect2 天前
LeetCode 130. 被围绕的区域:两种解法详解(BFS/DFS)
前端·算法·typescript