TypeScript 中的 lib
说明 lib 如何决定 TypeScript 默认提供哪些内建 API 类型定义,以及为什么 Node 项目经常要关心 DOM 类型是否被引入。
#tech / dev
#resource / typescript
#type / concept
#status / growing
[!info] related notes
- 所属 MOC: TypeScript MOC
- 配置入口: tsconfig 使用详解
- 并列概念: TypeScript 中的 target, TypeScript 中的 noEmit
TypeScript 中的 lib
一句话定义
lib 用来决定 TypeScript 默认把哪些 JavaScript / 平台 API 的类型定义加入当前项目。
核心机制 / 工作原理
TypeScript 不只理解语法,还会预置一批标准库类型。
例如:
MathMapPromisedocumentwindow
这些是否存在、以什么类型存在,和 lib 直接相关。
官方文档说明:
- TypeScript 会根据
target默认带上一组lib - 也可以手动覆盖它们
最小例子 / 最小场景
默认依赖 target
如果你没有手写 lib,TypeScript 会根据 target 推出一组默认库。
手动指定
{
"compilerOptions": {
"target": "ES2020",
"lib": ["ES2020", "DOM"]
}
}
常见适用场景
浏览器前端
通常需要:
DOM- 对应版本的
ES*
Node 项目
很多时候并不希望默认带上浏览器 DOM 类型,以避免:
- 误以为
document/window在运行时可用
边界与易混淆点
lib 管的是“可见的类型 API”,不是 polyfill
哪怕类型里有 Promise 或 Map,运行时环境也未必真的有对应实现。
target 和 lib 可以拆开
官方文档明确说,两者可以 mix and match。
这意味着你可以:
- 用较新的语法目标
- 同时手动控制暴露哪些标准库类型
参考信息
- TSConfig
lib: https://www.typescriptlang.org/tsconfig/lib.html - TSConfig
target: https://www.typescriptlang.org/tsconfig/target.html