tsconfig.json 的 compilerOptions 必须显式配置,空文件或仅 {} 不生效;VSCode 仅读取根目录下非空的 tsconfig.json,否则退化为语法高亮,target、outDir 等全部失效。

tsconfig.json 的 compilerOptions 必须显式配置,空文件或仅 {} 不生效
VSCode 的 TypeScript 语言服务只读取根目录下严格命名为 tsconfig.json 的非空 JSON 文件。如果文件是空的 {}、只有注释、或路径错误(比如放在 src/tsconfig.json),编辑器就退化为语法高亮,target、outDir 等编译行为全部失效。
正确做法是用 npx tsc --init 生成基础模板,再手动删减或调整。哪怕只保留最小可用配置,也得确保:
"compilerOptions": {"target": "ES2020", "outDir": "./dist"}-
"include": ["src/**/*"](注意用正斜杠,不能写成src\**\*) - 文件保存为 UTF-8 编码,无 BOM
target 和 lib 不匹配会导致全局 API 标红但运行正常
target 控制输出 JS 的语法层级,lib 决定哪些内置类型和全局变量被识别。两者不一致时,VSCode 会误报错——比如 target: "ES2019" 但 lib: ["ES2020", "DOM"],Promise.allSettled 就会标红,尽管 Node.js 或浏览器实际支持。
常见安全组合:
- Node 环境:
"target": "ES2020", "lib": ["ES2020", "DOM"](DOM 可选,部分 Node API 如AbortSignal需要它) - 纯前端项目:
"target": "ES2017", "lib": ["ES2017", "DOM"] - 若用
target: "ES5",必须配"lib": ["ES5", "DOM"],否则Array.prototype.includes类型不识别
outDir 和 rootDir 配错会导致编译混乱甚至死循环
outDir 是输出目录,rootDir 是源码根目录,二者必须明确区分且不能重叠。漏掉 rootDir 时,tsc 会自动推导,但可能把 node_modules 或 dist 也当源码扫进去;若 outDir 和 rootDir 同为 "./",tsc 可能反复编译自己刚生成的 JS 文件,最终报错 error TS5055: Cannot write file ... because it would overwrite input file。
完整的Galileo AI平台 TypeScript/JS SDK 参考,用于评估、观察和保护 GenAI 应用。适用于构建 Node.js 或 TypeScript 项目。
典型安全写法:
- 源码在
src/:加"rootDir": "./src","outDir": "./dist" - 源码在
packages/ui/src/(monorepo):"rootDir": "./src","outDir": "./dist",且确保include路径覆盖正确 - 绝对不要设
"outDir": "./src"或"outDir": "./"
noEmit 设为 true 是“编译不输出”的静默陷阱
"noEmit": true 的本意是只做类型检查、不生成 JS,常被误用于“调试时先关输出”。但它不会报错提示,VSCode 里一切看起来正常(有波浪线、能跳转),但 npx tsc 运行后 dist 目录空空如也,launch.json 断点也永远绑定失败。
检查方式很简单:终端执行 npx tsc --dry,看是否列出待输出文件;或者直接删掉 dist 后运行 npx tsc,观察目录是否重建。
开发中更稳妥的做法是保留 "noEmit": false(默认值),靠 "sourceMap": true + "inlineSources": true 保证调试体验,而不是关输出。

















