VSCode 仅调用项目中的 tsc 并读取 tsconfig.json,类型检查依赖本地 TypeScript 版本、tsconfig.json 正确加载及工作区 TS 服务;tsconfig.json 必须存在且非空,命名严格为 tsconfig.json,多包需各自配置;strict 不保证子选项生效,应显式设置 noImplicitAny 等;路径别名和 monorepo 引用需 baseUrl、paths、declaration 同时正确;类型检查与编译逻辑分离,调试需统一 TS 版本与配置。

VSCode 本身不编译 TypeScript,也不决定类型检查是否生效——它只负责调用你项目里的 tsc 和读取 tsconfig.json。真正起作用的是:本地 typescript 包版本、tsconfig.json 是否被正确加载、以及 VSCode 是否用了工作区版本的 TS 服务。
tsconfig.json 必须存在且非空,否则类型检查完全不启动
VSCode 的 TypeScript 语言服务默认只认根目录下名为 tsconfig.json(大小写敏感)的文件,且内容不能是空的 {} 或只有注释。一旦缺失或命名错误(比如 TsConfig.json),编辑器就退化为纯语法高亮,连 any 错误都不会标红。
- 用
npx tsc --init生成基础配置,别手写或复制过期模板 - 确保文件里至少有
"compilerOptions": {},哪怕里面暂时没配任何项 - 如果项目含多个子包(monorepo),每个子包想独立启用类型检查,就得各自有
tsconfig.json,并用code ./packages/ui单独打开该目录作为工作区 - 改完
tsconfig.json后,必须手动执行Ctrl+Shift+P→ “TypeScript: Restart TS Server”,否则编辑器继续用旧缓存
strict 和 noImplicitAny 不开,类型检查等于形同虚设
strict 是一组检查开关的总控,但 VSCode 的语言服务不会“自动推导”它开启的子项是否生效——尤其在老版本 TS 或配置冲突时,noImplicitAny 可能静默失效,导致函数参数全是 any 却不报错。
完整的Galileo AI平台 TypeScript/JS SDK 参考,用于评估、观察和保护 GenAI 应用。适用于构建 Node.js 或 TypeScript 项目。
- 显式写
"noImplicitAny": true,比只写"strict": true更可靠 -
"skipLibCheck": false才会检查node_modules/@types/中的声明,设为true虽快,但可能掩盖@types/react版本错配导致的useState类型丢失 -
"lib": ["ES2020", "DOM"]必须和"target"匹配,否则像Promise.allSettled这种 API 会标红,即使运行时完全支持 - 如果状态栏右下角显示 “TS 5.0.4 (Bundled)”,说明 VSCode 没用你项目的
typescript,点它选 “Use Workspace Version”
tsc 编译要手动触发,保存即编译容易埋坑
VSCode 默认保存 .ts 文件时只做一次类型检查(显示波浪线),并不会调用 tsc 输出 .js。所谓“自动编译”,其实是靠 tasks.json 或终端命令驱动的,而这两者行为差异很大。
- 不要在
tsconfig.json里设"compileOnSave": true——它已废弃,且和 Webpack/Vite 构建流程冲突 - 用终端跑
npx tsc最可控;加--watch可监听,但注意它不重启进程,改了tsconfig.json需手动 Ctrl+C 再重跑 - 如果配
tasks.json,"command"建议写"npx"+"args": ["tsc", "-w"],而不是直接"tsc",避免找不到本地tsc -
"outDir"和"rootDir"路径不能重叠,否则tsc -w可能把生成的.js当源码二次编译,报一堆循环引用错误
路径别名和 monorepo 引用失败,90% 是 baseUrl 或 declaration 没对齐
paths 别名(如 @utils/*)和跨包引用(如 import { Button } from 'ui')不是开箱即用的。VSCode 能否跳转、补全、不报 “Cannot find module”,取决于三处是否同时满足。
-
tsconfig.json中必须有"baseUrl": ".",且"paths"的值是相对于baseUrl的相对路径,例如"@utils/*": ["src/utils/*"] - 被引用的本地包(如
packages/ui)必须在自己的tsconfig.json里设"declaration": true,并导出types字段或index.d.ts - VSCode 不读
jsconfig.json的paths,所以 TS 项目务必用tsconfig.json配置别名 - 如果仍报模块找不到,右键文件 → “TypeScript: Select TypeScript Version” 再选一次工作区版本,TSServer 有时会卡在旧解析上下文里
最常被忽略的一点:VSCode 的类型检查和编译是两套逻辑。你看到的红线可能来自语言服务(基于内存 AST),而 tsc 报错是基于磁盘文件和完整依赖图——它们用的 TS 版本、tsconfig.json 路径、甚至 node_modules 解析顺序都可能不同。调试时优先确认右下角 TS 版本和终端 npx tsc --version 一致,再查配置。

















