菜单

类型定义

相关源文件

类型定义是 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 的核心对象,如 ObjectArrayFunction 等。它还包含了全局函数如 parseIntevalisNaN 的类型声明。

示例:Object 接口

来源: src/lib/es5.d.ts105-135

ES2015+ 库

TypeScript 将较新的 JavaScript 功能组织到单独的库文件中。这些文件在核心 ES5 定义的基础上,增加了对较新 ECMAScript 版本中引入的功能的类型支持。

ES2015 核心

ES2015 核心库为 Promise、箭头函数、类和其他 ES2015 特性添加了类型定义。

来源: src/lib/es2015.core.d.ts1-47

ES2015 集合

集合库为 ES2015 集合类型定义了类型,如 MapSetWeakMapWeakSet

来源: src/lib/es2015.collection.d.ts1-34

ES2015 迭代器

迭代器库为 ES2015 的迭代协议添加了类型。

来源: src/lib/es2015.iterable.d.ts37-39 src/lib/es2015.iterable.d.ts58-61

DOM 和 Web API 定义

TypeScript 包含文档对象模型 (DOM) 和其他 Web 平台 API 的全面类型定义。

来源: src/lib/dom.generated.d.ts10-273 src/lib/dom.generated.d.ts574-578

DOM 接口

DOM 定义包含了所有 HTML 元素、事件和其他 DOM 相关类型的接口。

来源: src/lib/dom.generated.d.ts1095-1105

Web Workers

TypeScript 还包含 Web Workers 的定义,它允许在后台线程中运行 JavaScript。

来源: src/lib/webworker.generated.d.ts1-5

如何引用库定义

TypeScript 提供了多种方式将库定义包含在项目中

引用指令

您可以使用文件顶部的三斜杠引用指令来包含特定的库定义。

来源: src/lib/es2015.symbol.wellknown.d.ts1

tsconfig.json 配置

更常见的是,您可以在 tsconfig.json 文件中指定库。

TypeScript 编译器会根据 targetlib 选项自动包含适当的库定义。

库定义中的高级类型功能

TypeScript 的库定义利用了高级类型系统功能来准确地模拟 JavaScript 的行为。

泛型

来源: src/lib/es5.d.ts1-135

声明合并

同一个接口可以在多个文件中定义,TypeScript 会合并这些定义。

映射类型

库定义使用映射类型将一个类型转换为另一个类型。

来源: tests/baselines/reference/mappedTypeRecursiveInference.types18-21

类型定义生成

某些库定义文件(例如 dom.generated.d.tswebworker.generated.d.ts)是自动生成的,而非手工编写。这确保了它们与不断发展的 Web 平台规范保持同步。

库文件目的
es5.d.ts核心 JavaScript (ES5) 类型
es2015.*.d.tsES2015 (ES6) 功能类型
dom.generated.d.tsDOM API 类型
webworker.generated.d.tsWeb Worker API 类型
es2020.bigint.d.tsBigInt 类型和方法

来源: 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 编译管道中起着至关重要的作用。

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 域进行组织,方便为项目只包含必要的定义。