第75课:模块化演进:CommonJS → ESM——规范对比、require vs import、循环依赖处理在 ES6 之前,JavaScript 没有官方的模块系统。随着前端应用规模的爆炸式增长,社区先后创造了 IIFE(立即执行函数)、CommonJS、AMD 和 UMD 等模块方案来组织代码。2015 年,ES6 带来了官方标准 ES Modules(ESM),为浏览器和服务器提供了统一的静态模块体系。然而,CommonJS 在 Node.js 生态中根深蒂固,两者长期共存,导致开发者在模块互操作、打包配置和循环依赖处理上遇到无数陷阱。本节课将系统地梳理模块化的演进脉络,深入对...
第74课:TypeScript 与 React / Vue 集成——React 类型、defineComponent、PropType、emit 类型TypeScript 与前端框架的深度结合是现代 Web 开发的标配。React 和 Vue 3 都提供了完备的类型系统支持,使组件 Props、事件、状态和模板表达式都能够享受静态类型检查的保障。然而,两个框架在类型集成上采用了不同的哲学:React 以类型注解为核心——直接通过 TypeScript 的类型语法标注函数参数、泛型 Hooks 和事件对象;Vue 3 则通过编译器宏(defineProps、defineEmits...
第73课:声明文件与类型声明——.d.ts、@types、全局声明、模块扩展TypeScript 的强大依赖于类型信息。当你在 TypeScript 项目中使用 JavaScript 库(如 Lodash、Express)、浏览器 API(如 fetch、localStorage)、或注入全局变量时,TypeScript 编译器如何知道这些代码的类型?答案在于声明文件(.d.ts 文件)。声明文件是 TypeScript 生态的基石,它们为无类型的 JavaScript 代码赋予静态类型信息,使 IDE 能够提供智能提示、类型检查和重构支持。本节课将系统讲解声明文件的结构与语法、使用 D...
第72课:内置工具类型(下)——Exclude/Extract/NonNullable/Parameters/ReturnType上一节课我们学习了 Partial、Required、Readonly、Pick、Omit 和 Record,它们主要通过映射类型来变换对象属性的数量和修饰符。本节课将继续探索另一类核心工具类型——它们基于条件类型和 infer 关键字实现,用于在联合类型中过滤成员,或从函数类型中提取参数和返回值的类型信息。理解这些工具的实现原理,是掌握 TypeScript 高级类型编程的关键一步,也是读懂大型项目类型定义和编写泛型工...
第71课:内置工具类型(上)——Partial/Required/Readonly/Pick/Omit/RecordTypeScript 提供了二十余个内置工具类型(Utility Types),它们本质上是预先编写好的泛型类型,用于对现有类型进行变换——添加或移除修饰符、选取或排除属性、构造新的对象形状。理解这些工具类型的实现原理,不仅能让你更高效地使用它们,还能帮助你深入掌握映射类型、条件类型和 keyof 的配合运用。本节课将逐源码级拆解最常用的六个工具类型:Partial、Required、Readonly、Pick、Omit 和...
第70课:泛型(下)——条件类型、infer、分布式条件类型、映射类型上一节课我们学习了泛型的基础:类型参数如何让函数和接口变得通用且类型安全。本节课将进入 TypeScript 泛型的高级领域——条件类型(Conditional Types)允许你根据类型关系作出“类型层面的判断”;**infer 关键字让你在条件类型中提取和推断类型的局部信息;分布式条件类型是条件类型作用于联合类型时的自动分配行为;映射类型**(Mapped Types)则能遍历类型的属性并逐个修改,是 TypeScript 内置工具类型的底层引擎。这四种能力组合在一起,构成了 TypeScript 类型编程的“图灵...
第69课:泛型(上)——泛型函数、泛型接口、泛型约束与默认类型泛型(Generics)是 TypeScript 类型系统中最强大的特性之一。它允许你编写可复用、类型安全的组件,同时保留调用方传入的具体类型信息。简单来说,泛型就是“类型参数”——函数、接口或类可以接受一个或多个类型变量,在使用时由调用方指定(或由编译器推断)具体的类型,从而在保持灵活性的同时不丢失类型信息。本节课将聚焦于泛型的基础语法:如何在函数和接口中声明类型参数、如何对类型参数施加约束(限制其必须满足某些条件),以及如何提供默认类型以简化使用。
1. 泛型函数:让函数与类型共舞1.1 从 any 到泛型:丢失类型信息...
第68课:类与访问修饰符——public/private/protected、抽象类、implementsTypeScript 对 JavaScript 的 class 进行了全面的类型增强。它不仅支持标准的类语法,还引入了访问修饰符(public、private、protected)来在编译时控制成员的可访问性,以及抽象类和接口实现(implements)来强制子类遵守特定的契约。本节课将逐一拆解这些特性的语法、语义和编译结果,并通过实际场景演示它们如何帮助构建更安全、更具约束力的面向对象代码。
1. 类的基本类型注解TypeScript 中的类与 JavaScr...
第67课:联合类型与交叉类型——| 与 &、类型收窄、字面量类型在 TypeScript 中,类型并非总是单一的。现实世界的值往往具有多种可能的形式:一个变量可能是字符串或数字;一个函数的参数可能接受多个不同的接口;一个组合配置需要同时满足多个约束。联合类型(|)和交叉类型(&)是表达这种灵活性的核心工具。本节课将深入两者的语法与语义,重点讲解如何通过类型守卫(Type Guards)将联合类型安全地“缩窄”为具体类型,以及交叉类型在组合对象形状和混入模式中的实战应用。
1. 联合类型(Union Types):A | B联合类型表示一个值可以是多种类型中的一种。语法为...
第66课:函数类型与重载——参数类型、返回值类型、this 类型、函数重载函数是 JavaScript 中的一等公民,也是 TypeScript 类型系统的重点关注对象。TypeScript 提供了丰富的语法来描述函数的参数类型、返回值类型、**this 上下文类型,以及通过函数重载(Function Overloads)** 来表达一个函数可以接受不同参数组合并返回不同结果的能力。本节课将系统讲解函数类型注解的完整语法、可选参数与默认参数的类型交互、剩余参数的类型声明、以及如何通过重载签名来精确描述复杂的函数契约。
1. 函数类型注解1.1 参数类型与返回值类型在 TypeScrip...