vscode不编译typescript,仅调用项目tsc和tsconfig.json;需确保tsconfig.json在根目录、选workspace版本、修改后重启ts服务,并正确配置strict、moduleresolution等compileroptions。

VSCode 本身不编译 TypeScript,也不“开启”类型检查——它只是调用你项目里的 tsc 和 tsconfig.json。只要这两样配错或没对齐,红波浪线就消失、路径跳转就失效、保存也不出 JS 文件。
为什么改了 tsconfig.json 但 VSCode 没反应?
VSCode 的 TypeScript 语言服务(TS Server)只读取项目根目录下严格命名为 tsconfig.json 的文件,且必须满足:
- 文件非空:至少含
{}或有效 JSON,空文件或纯注释会被忽略 - 路径正确:必须在工作区根目录(不是
src/tsconfig.json),多根工作区每个文件夹需独立配置 - 版本对齐:状态栏右下角显示的 TypeScript 版本必须是
Use Workspace Version(指向node_modules/typescript),不是Bundled - 手动重启:每次修改
tsconfig.json后,必须按Ctrl+Shift+P→ 输入并执行TypeScript: Restart TS server
哪些 compilerOptions 真正影响类型检查?
VSCode 的错误提示、补全、悬停类型都由 compilerOptions 中的静态检查项驱动,和是否生成 JS 无关。关键项包括:
完整的Galileo AI平台 TypeScript/JS SDK 参考,用于评估、观察和保护 GenAI 应用。适用于构建 Node.js 或 TypeScript 项目。
-
"strict": true—— 必开。它启用noImplicitAny、strictNullChecks等一整套约束,单独开子项容易漏掉 -
"skipLibCheck": false—— 若设为true(默认),VSCode 就不会检查node_modules/@types/xxx中的声明,可能掩盖类型不匹配问题 -
"lib": ["ES2020", "DOM"]—— 直接决定全局变量(如Promise.allSettled、AbortSignal)是否被识别,和target不一致就会误报 -
"moduleResolution": "node"—— 必须显式设置,否则paths别名、exports字段、import解析都会失败 -
"noEmit": false—— 默认值,但若被意外设为true,tsc就不会输出 JS,而 VSCode 不会警告这点
如何让保存自动编译 JS 文件?
VSCode 默认不触发编译,所谓“保存即编译”本质是后台运行 tsc --watch。这不是编辑器功能,而是任务配置结果:
- 不要依赖
"compileOnSave": true:它已过时,且易与 Webpack/Vite 冲突;直接删掉或设为false - 用
tasks.json配监听任务:在.vscode/tasks.json中写"command": "npx"+"args": ["tsc", "--watch"],并确保"isBackground": true和"problemMatcher": "$tsc-watch" - 验证
outDir和include:若"outDir": "./dist"但"include"漏了"src/**/*",tsc就找不到源文件,监听也白搭 - 别在
settings.json里乱加typescript.preferences.*选项:它们只影响智能提示,对编译完全无效
路径别名(如 @/utils)不跳转、不补全?
VSCode 对 paths 的支持完全依赖 tsconfig.json 的两处配置,缺一不可:
-
"baseUrl": "."—— 必须存在,且是相对于tsconfig.json的路径;设成"./src"或"src"都会导致解析失败 -
"paths": { "@/*": ["src/*"] }—— key 和 value 都必须以/*结尾;写成"@/utils": ["src/utils"]或"@/*": ["./src/*"]均无效 -
jsconfig.json不生效:TS 项目只认tsconfig.json,即使你同时有两者,paths也只从 TS 配置读 - 确认文件被包含:若
src/utils/index.ts没被"include"覆盖,VSCode 就不会为其建立类型索引,跳转自然失效
最常被忽略的点是:VSCode 的类型检查和编译行为,其实由两个独立系统驱动——语言服务(TS Server)负责实时提示,tsc 负责产出 JS。它们共用 tsconfig.json,但各自读取的字段不同、生效条件也不同。混用配置、跳过重启、误信“自动”机制,是绝大多数问题的根源。










