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

相关推荐
Momo__2 天前
TypeScript NoInfer<T>——精准控制泛型推断的工具类型
前端·typescript
退休倒计时3 天前
【每日一题】LeetCode 146. LRU 缓存 TypeScript
算法·leetcode·缓存·typescript
kyriewen3 天前
TypeScript 高级类型:我用 infer 写了一个类型安全的 EventBus,终于搞懂了泛型约束
前端·javascript·typescript
月光刺眼3 天前
Bun + TypeScript 后端入门:从类型约束到 LLM API 调用
后端·typescript
天蓝色的鱼鱼4 天前
Node.js 现在能直接跑 TypeScript 了,tsx 和 ts-node 还需要吗?
前端·typescript·node.js
Oo9204 天前
Bun:下一代 JavaScript/TypeScript 运行时,从入门到实践
typescript·bun
Asize4 天前
Bun + TypeScript 实战:从接口约束到 RESTful 路由设计
后端·typescript·代码规范
大家的林语冰4 天前
超越 TypeScript,Flow 强势回归,语法高仿 TS,功能更丰富,类型更安全!
前端·javascript·typescript
用户484526255825 天前
Bun 入门:Bun.serve 零依赖启动 HTTP 服务
typescript
meilindehuzi_a5 天前
构建基于 RESTful 架构的 TodoList 全栈应用:从前后端理论到 TypeScript/Bun 实战
架构·typescript·restful