核心结论
files、include 与 exclude 用于确定项目的初始根文件集合,但三者并不是一个简单的“先加入、再统一排除”的过滤管道。files 显式枚举必须作为根文件进入项目的文件;include 按路径模式发现根文件;exclude 主要排除由 include 扫描产生的候选文件。即使某文件匹配 exclude,只要它被已纳入项目的文件导入、被三斜线指令或类型引用关联,仍可能进入完整编译上下文。因此,exclude 不是禁止编译器读取文件的隔离墙。
底层机制
编译器读取 tsconfig.json 后,会解析配置继承、编译选项和根文件候选集。随后从根文件出发执行