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. void 与 undefined 的区别

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

相关推荐
nyaomaru17 小时前
将一个真实的 TypeScript OSS 库从 tsup 迁移到 tsdown
前端·typescript
wflynn1 天前
GitHub 今日推荐|ts-rust:把微软 TypeScript-Go 编译器逐行移植成 Rust 实现
rust·typescript·开源·github·compiler·tsc
Duang007_2 天前
生产可观测性:从“系统慢“到“根因“的完整链路(Go / TypeScript)
后端·python·golang·typescript·prometheus
IllegalCreed3 天前
用 TypeScript 从零重写《仙剑奇侠传》:能通关的浏览器版,和一个给它做内容的可视化编辑器
typescript
_zxd3 天前
TypeScript 类型树
前端·typescript
Flynt3 天前
SvelteKit 3 升级实录:sv migrate 改完 6 个源文件,还给我留了张任务清单
typescript·前端框架·svelte
光影少年4 天前
Taro 是如何解析入口配置 app.config.ts 和页面配置的?
微信小程序·小程序·typescript·reactjs·百度小程序·taro
AI情绪识别开源5 天前
HFpEF 心房-心室耦联效率无创监测方向(AVCEI)
typescript·laravel·perl
凤城老人5 天前
从 PyQt6 到 Electron:给 Edge TTS 做一个“多角色配音机“的踩坑手记
javascript·typescript·electron
zhousenshan7 天前
TypeScript 入门到精通
typescript