ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

The Concise TypeScript Book 精讲:深入理解 TypeScript 的 void 类型

The Concise TypeScript Book 精讲:深入理解 TypeScript 的 void 类型 文档教程【免费下载链接】typescript-bookThe Concise TypeScript Book: A Concise Guide to Effective Development in TypeScript. Free and Open Source.项目地址https://gitcode.com/gh_mirrors/typ/typescript-book点击查看免费下载void是 TypeScript 内置类型体系中最容易被误读的类型之一。它表示一个函数不返回任何值常用于函数返回类型标注但很多人会把它与undefined、null甚至never混为一谈。本文以《The Concise TypeScript Book》的 void 类型章节 为骨架结合该开源仓库中 类型系统探索章节、内置类型原语 与 never 类型章节 的源码级论述系统讲清void的语义、赋值规则、与undefined/never的边界以及在实际代码中的正确用法。读完本文你将能够准确标注无返回值函数、读懂回调函数中的void返回类型并避开void相关的常见类型错误。一、void的核心语义表示没有返回值按原文档的定义void类型用于表示一个函数不返回任何值。这与 JavaScript 中void运算符void 0得到undefined的含义不同TypeScript 中的void是一个独立的类型原语。原文档给出的最小示例const sayHello (): void { console.log(Hello!); };这里sayHello的返回类型被标注为void说明调用方不应依赖它的返回值。即使函数体末尾隐式返回undefined从类型系统角度看它依然属于void。该章节在仓库中隶属于 内置类型原语 所描述的类型体系void: Represents the absence of any type. It is commonly used as the return type of functions that do not return a value.也就是说void描述的是任何类型的缺失这与never永远不会发生的值形成鲜明对比——这两者在 目录 中被排为第 47 与 48 章属于相邻对照的两个主题。二、void的赋值规则与可赋值性边界很多人以为void就是undefined其实二者在可赋值性上存在微妙差异。仓库中的 探索类型系统 一章给出了明确的规则let g: void; let g1: any; g 1; // Invalidvoid 除了 any 之外不接受任何类型的赋值 g g1; // Validany 可以赋值给 void由此可以总结出void的可赋值性边界没有任何具体值可以赋给void变量void变量只能保持undefined状态只有any类型可以赋给void反过来void变量赋值给number等其他类型同样非法。同章节还专门提示了与严格空值检查strictNullChecks的联动当启用strictNullChecks时null和undefined的处理方式类似于void否则它们的行为类似于never。这句话揭示了void、null、undefined、never在同一类型系统下的位置关系也是面试与工程实践中常见的考察点。三、void与undefined、never的边界辨析3.1void与undefined语义角度undefined表示一个值尚未被赋值或尚未被定义void表示没有值这一概念通常只作为函数返回类型出现。可赋值性角度在strictNullChecks开启时二者处理方式相近但严格来说void更空——一个void类型的变量甚至不能接收显式的undefined以外的常规赋值。3.2void与never对照仓库中的 never 类型章节const infiniteLoop (): never { while (true) { // do something } }; const throwError (message: string): never { throw new Error(message); };never表示永远不会有返回值的函数或表达式无限循环、抛异常而void表示函数会正常结束但不返回任何值。二者的关键区别维度voidnever含义没有返回值值永远不会产生函数形态正常返回隐式返回 undefined无限循环 / 抛异常永远走不到返回典型用途声明无返回值函数、回调签名穷尽性检查、不可达分支标注void与never还经常搭配使用。在 never 类型章节 的穷尽性检查示例中一个switch分支函数本身标注为void返回而default分支使用never承接不可达的联合成员type Direction up | down; const move (direction: Direction): void { switch (direction) { case up: // move up break; case down: // move down break; default: const exhaustiveCheck: never direction; throw new Error(Unhandled direction: ${exhaustiveCheck}); } };这是void在实际工程中最常见的搭档场景外层函数声明没有返回值内层用never做编译期的穷尽性校验。四、工程中的高频使用场景4.1 类与接口中的方法签名仓库中的 class.md 大量使用void标注无返回值的实例方法public sayHi(): void { ... } public introduce(): void { ... } abstract makeSound(): void;在接口与抽象类中void作为方法契约强制所有实现类的方法不返回任何有意义的值。4.2 回调函数与函数类型签名void常出现在回调、事件处理器和函数类型定义中例如 typescript-introduction.md 里的动物接口interface Animal { bark: () void; meow: () void; }这里的关键点是返回类型为void的函数类型允许被一个实际返回了值的函数实现。这是 TypeScript 在回调场景下对void的特殊放宽——比如forEach的回调类型是(value: T) void你传入v v.length返回 number依然合法因为调用方承诺忽略返回值。这既保证了 API 的灵活性又避免了误用返回值。4.3 泛型函数与类型操作工具泛型约束场景generics.md 中的const printLen T extends { length: number }(value: T): void {...}用void声明工具函数无返回值条件类型与工具类型场景type-manipulation.md 中type Func (a: string, b: number) void;配合ParametersFunc抽取参数类型ReturnTypeT也能作用于void返回的函数类型得到void。五、最佳实践小结无返回值函数统一标注: void让类型系统明确不要使用返回值提升可读性不要用void声明暂未确定的变量需要未定义/未知语义时请使用undefined、unknown或null区分void与never正常结束不返回值用void永不返回异常/死循环/不可达分支用never善用回调中的void放宽在设计事件回调、迭代器回调等 API 时用(...) void作为参数类型可以接受返回了值但调用方忽略的实现配合strictNullChecks理解空值语义开启严格空值检查后null/undefined与void的处理边界更清晰也更贴近真实工程配置。六、相关章节与延伸阅读void只是 TypeScript 内置类型体系中的一环建议结合以下仓库章节形成完整认知内置类型原语number、string、boolean、any、void、never等原语的完整定义探索类型系统可赋值性规则、类型即集合Sets的视角以及strictNullChecks下的空值语义never 类型与void成对学习掌握穷尽性检查模式类型操作ParametersT、ReturnTypeT等工具类型对void函数类型的处理函数与类类方法、抽象方法中的void返回类型实践。通过将《The Concise TypeScript Book》中零散的void知识点与仓库内多个章节相互印证你可以从认识语法上升到理解设计意图在实际项目中写出更严谨、更易维护的类型代码。赞分享文档教程【免费下载链接】typescript-bookThe Concise TypeScript Book: A Concise Guide to Effective Development in TypeScript. Free and Open Source.项目地址https://gitcode.com/gh_mirrors/typ/typescript-book点击查看免费下载相关推荐The Concise TypeScript Book 德文版精讲TypeScript 枚举Enums全类型深入剖析The Concise TypeScript Book 德文版精讲TypeScript 枚举Enums全类型深入剖析 导读本文以开源仓库 typescr文档教程The Concise TypeScript Book 精读深入解析 TypeScript 的原始类型Primitive TypesThe Concise TypeScript Book 精读深入解析 TypeScript 的原始类型Primitive Types 导读 本文基于开源项文档教程The Concise TypeScript Book 精讲深入理解 never 类型与穷尽性检查实战The Concise TypeScript Book 精讲深入理解 never 类型与穷尽性检查实战 never 是 TypeScript 内置类型中最特殊文档教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表