vs code 不报 typescript 类型错误,大概率是语言服务未连上正确 tsc 或配置被静默绕过:tsconfig.json 未生效(文件未被 include/exclude 冲突/多配置优先级错)、typescript 版本非 workspace 导致语法与检查不一致、存在 @ts-nocheck 或 skiplibcheck 异常、ts server 未重启导致缓存未更新。

VS Code 不报 TypeScript 类型错误,大概率不是代码问题,而是语言服务没连上正确的 tsc 或配置被静默绕过。
tsconfig.json 没生效?先看文件是否被包含
即使写了 "strict": true,VS Code 也不会检查未纳入 include 或 files 的文件。常见漏配:
-
"include"只写了["src/**/*"],但你的测试文件在test/下,就得加"test/**/*" - 用了
"exclude"却误删了"node_modules",导致类型定义冲突(尤其装了多个@types包时) - 根目录有多个
tsconfig.json(比如父文件夹也有),VS Code 会优先用路径上最近的那个——可能根本不是你改的那个
报错消失或错位?检查 TypeScript 版本是否一致
VS Code 状态栏右下角显示的版本号,必须是 TS X.X.X (Workspace),而不是 Bundled 或 VS Code's Version。否则:
- 新语法(如
using声明、const断言增强)不识别 -
noImplicitAny等开关行为不一致:旧版可能跳过某些检查 - 编辑器提示的错误行号和
tsc --noEmit实际输出不一致
务必执行:TypeScript: Select TypeScript Version → 选 Use Workspace Version;如果没出现该选项,说明 node_modules/typescript 不存在,先运行 npm install --save-dev typescript。
明明配置了 strict,却没报错?警惕这些静默关闭项
以下任意一项都可能导致类型检查“失效”:
- 文件顶部有
// @ts-nocheck—— 它会彻底禁用整个文件的检查,比// @ts-ignore影响范围大得多 -
tsconfig.json中"noEmit": true是正常设置,但若同时设了"skipLibCheck": false且@types包损坏,语言服务可能卡住、不报任何错 - 项目用了 Vite 或 Vue,但没配
"types": ["vite/client"]或vite-env.d.ts,导致import.meta.env等全局变量被识别为any,进而让后续推导全变宽松
重启 TS Server 是最快验证手段
很多“配置改了但没反应”的情况,本质是语言服务缓存了旧状态。不要反复重开窗口,直接:
按 Ctrl+Shift+P(Mac 为 Cmd+Shift+P)→ 输入 TypeScript: Restart TS server → 回车。几秒后所有波浪线会重新计算。这步比清缓存、删 CachedData 快得多,也更安全。
真正容易被忽略的是:VS Code 的类型检查和构建工具(如 tsc、vitest typecheck)各自读各自的 tsconfig.json。你改了项目根目录的配置,但 vitest 可能正用 tsconfig.test.json,而编辑器只认当前打开文件所属的 tsconfig —— 路径层级和继承关系必须对得上。











