VSCode TypeScript类型检查失效主因是tsserver未正确加载或配置错误:需确保tsconfig.json在根目录、include覆盖当前文件、排除node_modules冲突、选Workspace版本并重启TS服务。

VSCode 的 TypeScript 类型检查失效,几乎从来不是代码本身的问题,而是语言服务(tsserver)没连上、连错了,或者被静默绕过了。
为什么改了 tsconfig.json 却没反应
最常见原因是配置根本没被加载——VS Code 只认工作区根目录下第一个有效的 tsconfig.json,且必须满足三个硬性条件:
-
include字段没覆盖你正在编辑的文件路径(比如只写了["src/**/*"],但你在test/utils.ts里写代码,就得加"test/**/*") -
exclude误删了"node_modules",导致类型定义冲突(尤其多版本@types共存时) - 父目录存在另一个
tsconfig.json,VS Code 优先用了那个(路径上最近的),而不是你刚改的那个
验证方式:打开命令面板(Ctrl+Shift+P),执行 TypeScript: Go to Project Configuration,它会直接跳转到当前生效的配置文件。
tsserver 崩了却不报错,怎么确认和重启
tsserver 是独立 Node 进程,崩溃后 VS Code 状态栏可能还显示 “Running”,但实际已无响应。典型表现包括:
- 悬停变量看不到类型
-
Ctrl+Click跳转失败或跳到声明文件开头 - 输入
arr.后无方法补全
不要等它自愈,直接执行:Ctrl+Shift+P → 输入 TypeScript: Restart TS server → 回车。注意:该命令只在「已打开文件夹」的窗口中有效;单文件打开时,tsserver 会退化为 JavaScript 模式,不读 tsconfig.json。
为什么状态栏显示 TypeScript 版本,但类型检查还是宽松
右下角显示的版本号决定你看到的错误是否真实。如果显示的是 TS X.X.X (Bundled) 或 VS Code's Version,哪怕 tsconfig.json 里写了 "strict": true,你也看不到 Object is possibly 'undefined' 这类提示。
- 先运行
npm install --save-dev typescript,确保node_modules/typescript存在 - 再执行
TypeScript: Select TypeScript Version→ 选Use Workspace Version - 如果没这个选项,说明
typescript没装对,或路径被typescript.tsdk配置项错误指向了不存在的位置(检查.vscode/settings.json是否有该字段,删掉即可)
哪些配置项会静默关闭类型检查
以下任意一项都会让 "strict": true 形同虚设:
- 文件顶部有
// @ts-nocheck—— 它比// @ts-ignore更狠,整文件跳过检查 -
tsconfig.json中"skipLibCheck": false但@types包损坏,tsserver可能卡住、不报任何错 - 用了 Vite/Vue 但没配
"types": ["vite/client"]或缺失vite-env.d.ts,导致import.meta.env被识别为any,后续推导全变宽松
真正容易被忽略的是:VS Code 的类型检查和构建工具(如 tsc --noEmit、vitest typecheck)各自读各自的配置,缓存也不共享。改完 tsconfig.json 后不重启 tsserver,就等于没改。


















