类型定义是 TypeScript 编译器的一部分,它为 JavaScript API 提供类型信息,从而在代码编辑器中启用 TypeScript 的类型检查功能和 IntelliSense 功能。本页将介绍 TypeScript 类型定义文件的结构、编译器如何使用它们,以及它们与更广泛的 TypeScript 生态系统的关系。
有关如何为 JavaScript 库编写自己的类型定义的更多信息,请参阅声明文件文档。
TypeScript 包含一组全面的类型定义,用于标准 JavaScript API、DOM 接口和其他 Web 平台功能。这些定义包含在 .d.ts 文件中,并按 ECMAScript 版本和 API 域进行组织。
来源: src/lib/es5.d.ts1-2 src/lib/dom.generated.d.ts1-4 src/lib/webworker.generated.d.ts1-3 src/lib/es2015.core.d.ts1-2 src/lib/es2015.symbol.wellknown.d.ts1-2
核心标准库定义为 JavaScript 的内置对象、函数和基本类型提供类型信息。最基础的是 es5.d.ts,它定义了 ES5 特性的类型。
来源: src/lib/es5.d.ts8-386 src/lib/es5.d.ts392-527 src/lib/es5.d.ts528-602
ES5 库定义了 JavaScript 的核心对象,如 Object、Array、Function 等。它还包含了全局函数如 parseInt、eval 和 isNaN 的类型声明。
TypeScript 将较新的 JavaScript 功能组织到单独的库文件中。这些文件在核心 ES5 定义的基础上,增加了对较新 ECMAScript 版本中引入的功能的类型支持。
ES2015 核心库为 Promise、箭头函数、类和其他 ES2015 特性添加了类型定义。
来源: src/lib/es2015.core.d.ts1-47
集合库为 ES2015 集合类型定义了类型,如 Map、Set、WeakMap 和 WeakSet。
来源: src/lib/es2015.collection.d.ts1-34
迭代器库为 ES2015 的迭代协议添加了类型。
来源: src/lib/es2015.iterable.d.ts37-39 src/lib/es2015.iterable.d.ts58-61
TypeScript 包含文档对象模型 (DOM) 和其他 Web 平台 API 的全面类型定义。
来源: src/lib/dom.generated.d.ts10-273 src/lib/dom.generated.d.ts574-578
DOM 定义包含了所有 HTML 元素、事件和其他 DOM 相关类型的接口。
来源: src/lib/dom.generated.d.ts1095-1105
TypeScript 还包含 Web Workers 的定义,它允许在后台线程中运行 JavaScript。
来源: src/lib/webworker.generated.d.ts1-5
TypeScript 提供了多种方式将库定义包含在项目中
您可以使用文件顶部的三斜杠引用指令来包含特定的库定义。
来源: src/lib/es2015.symbol.wellknown.d.ts1
更常见的是,您可以在 tsconfig.json 文件中指定库。
TypeScript 编译器会根据 target 和 lib 选项自动包含适当的库定义。
TypeScript 的库定义利用了高级类型系统功能来准确地模拟 JavaScript 的行为。
同一个接口可以在多个文件中定义,TypeScript 会合并这些定义。
库定义使用映射类型将一个类型转换为另一个类型。
来源: tests/baselines/reference/mappedTypeRecursiveInference.types18-21
某些库定义文件(例如 dom.generated.d.ts 和 webworker.generated.d.ts)是自动生成的,而非手工编写。这确保了它们与不断发展的 Web 平台规范保持同步。
| 库文件 | 目的 |
|---|---|
| es5.d.ts | 核心 JavaScript (ES5) 类型 |
| es2015.*.d.ts | ES2015 (ES6) 功能类型 |
| dom.generated.d.ts | DOM API 类型 |
| webworker.generated.d.ts | Web Worker API 类型 |
| es2020.bigint.d.ts | BigInt 类型和方法 |
来源: src/lib/es5.d.ts1 src/lib/dom.generated.d.ts1 src/lib/webworker.generated.d.ts1 src/lib/es2020.bigint.d.ts1
类型定义在 TypeScript 编译管道中起着至关重要的作用。
TypeScript 编译器在类型检查阶段使用类型定义来验证对内置类型和库类型进行的操作。这些定义会告知编译器 JavaScript API 的形状和行为。
来源: src/lib/es5.d.ts1-135 src/lib/dom.generated.d.ts1-50
TypeScript 的类型定义系统为 JavaScript、DOM 和 Web 平台 API 提供了全面的类型覆盖。这些定义使得 TypeScript 在使用这些 API 时能够提供强大的类型检查和编辑器功能。这些定义按 ECMAScript 版本和 API 域进行组织,方便为项目只包含必要的定义。