tsconfig 的 target、module、lib 与 strict 分别影响什么?
先理解原理和示例,再练习完整口述与追问。
回答要点
输出语法、模块形式、可见 API 类型、检查强度;编译与运行支持分开;解析模式适配工具链。
原理拆解
target 主要影响输出语言语法与部分默认设置,module 决定模块输出或相关处理方式,lib 决定参与检查的标准 API 声明,strict 开启一组严格检查。把 lib 加进来只让编译器认识 API,不会给旧浏览器安装实现;target 降低也不会自动补全部 polyfill。模块解析选项需要匹配 Node、打包器和实际版本。
示例与推演
服务端项目不必默认拥有 DOM 的 window 类型;浏览器项目使用 Promise 类型也不证明目标 WebView 支持 Promise。strictNullChecks 开启后,可能为 null 的字段必须处理,不能把 ! 写满整个项目来回避。noEmit 适合让 TS 只检查,由其他工具产出代码。
易错点
修改 strict、moduleResolution 等可能改变大量诊断,应从真实构建链与兼容目标出发。新版配置项不能照抄到旧编译器。
参考回答可直接练习口述
我分别配置语法输出、模块与解析、标准库类型和严格检查,并让它们与运行时和打包工具匹配。类型存在不等于 API 已实现,仍需运行时兼容与数据验证。TS 配置参考