← [ BACK_TO_NOTES ]

tsconfig 使用详解

说明 tsconfig.json 如何定义 TypeScript program 的边界、编译选项与项目引用规则。

#dev #typescript #concept #growing

[!info] related notes

tsconfig 使用详解

基础概念

tsconfig.json 是 TypeScript 编译器选项与文件边界的配置文件,用来定义一个 TypeScript program 应该如何被理解、检查和构建。

使用指南

单包项目的最小例子

{
  "compilerOptions": {
    "target": "ES2022",
    "module": "ESNext",
    "rootDir": "src",
    "outDir": "dist",
    "strict": true,
    "esModuleInterop": true,
    "declaration": true
  },
  "include": ["src/**/*"]
}

Monorepo 示例

{
  "extends": "../../tsconfig.base.json",
  "compilerOptions": {
    "composite": true,
    "declaration": true,
    "outDir": "dist",
    "rootDir": "src"
  },
  "include": ["src/**/*"]
}

按知识结构看常见选项

program 边界与输出结构

类型检查基线

控制流与代码卫生

JS 共存与迁移

全局类型与声明文件边界

声明与项目构建

模块系统与模块解析

模块互操作与单文件转译

已被替代的旧模块 emit 选项

路径映射与虚拟目录

经验总结

  • 单仓项目先关注 include/exclude、strict、module、target 这些基本边界。
  • monorepo 项目再进一步关注 composite、declaration、references 与包边界。
  • tsconfig 越往后越不适合继续堆在一篇总览里;一旦出现模块解析、产物目录、project references 这些稳定主题,就值得拆成原子页。

参考信息

学习检查

不看正文回答:

  1. tsconfig.json 最核心的职责为什么不只是“存编译器参数”,而是定义一个 TypeScript program 如何被理解和构建?
  2. include/exclude、rootDir/outDir、strict、module/moduleResolution 分别控制哪一类边界?
  3. 为什么前端 bundler 项目与直接交给 Node 运行的项目会选择不同的模块解析策略?
  4. Monorepo 中为什么会出现 composite、references 和声明产物这些额外需求?
  5. paths 为什么不能简单理解成“运行时自动支持的路径别名”?
  6. 给一个新的 TypeScript 项目,你会先确认哪些环境条件,再决定 tsconfig?

掌握验收

  • 能从 program 边界、类型检查、模块解析、emit、项目引用五个维度读懂一个陌生 tsconfig;
  • 能解释关键选项为什么存在,而不只是背默认值;
  • 遇到模块解析或 monorepo 问题时,能跳转到对应原子笔记定位问题。
创建于 2025/12/24 更新于 2026/9/30
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本