将 tsconfig.json 中 "noUnusedLocals": "error" 并重启 TS Server 即可使 TypeScript 未使用局部变量提示变为 Error;若无效需确认配置路径正确、无 ESLint 冲突或 monorepo 干扰。

如何让 VSCode 把 TypeScript 的 noUnusedLocals 从 Warning 变成 Error
VSCode 本身不直接控制“Warning”或“Error”的语义级别,它只是展示语言服务器(如 TypeScript Server)发来的诊断信息。真正决定某条规则是 Warning 还是 Error 的,是 TypeScript 的配置。
- 修改
tsconfig.json中的"compilerOptions":{ "compilerOptions": { "noUnusedLocals": "error", "noUnusedParameters": "warn", "strict": true } } - 支持的值只有
"error"、"warn"、"off"(注意是字符串,不是布尔值) - 改完后必须重启 TS Server:按
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS),输入并执行TypeScript: Restart TS server - 如果项目用了 ESLint + TypeScript,那实际提示可能来自 ESLint,此时要查
.eslintrc.js里@typescript-eslint/no-unused-vars的配置项,设为"error"
为什么改了 tsconfig.json 但 VSCode 还是只标黄(Warning)不报红(Error)
常见原因不是配置没生效,而是 VSCode 正在用错误的 tsconfig.json:
- 确认当前打开的是工作区根目录,且该目录下有
tsconfig.json;如果打开了子文件夹,TS Server 可能回退到全局默认配置 - 检查状态栏右下角:点击 TypeScript 版本号旁的
{} tsconfig.json,确认路径是否指向你修改的那个文件 - 如果项目含多个
tsconfig.json(如tsconfig.app.json、tsconfig.spec.json),VSCode 默认只读取根目录下的基础配置,其他需通过"extends"显式继承,否则不会生效 - 有些 monorepo 工具(如 Nx、pnpm workspaces)会干扰 TS Server 的配置解析,建议临时关闭插件(如
Nx Console)再验证
仅调整 VSCode 中 Warning/ Error 的视觉样式(不影响语义)
如果你不想改规则级别,只想让 Warning 更醒目(比如也变红色),这是纯 UI 层面的调整:
- 打开设置(
Ctrl+,),搜索workbench.colorCustomizations - 点击「在 settings.json 中编辑」,添加:
"workbench.colorCustomizations": { "editorWarning.foreground": "#ff0000", "editorError.foreground": "#ff0000" } - 注意:
editorWarning.foreground控制所有 Warning 的文字颜色(包括拼写、未使用变量等),但它不会改变问题面板里的图标或分类,问题仍归在 “Warnings” 组 - 不建议把 Warning 和 Error 颜色设成完全一样,否则失去区分意义;更实用的做法是调亮背景:用
editorWarning.background加浅色底纹
ESLint 规则和 TS 编译器规则混用时,谁说了算
当一个文件同时被 TypeScript Server 和 ESLint 检查(常见于 Vue/React + TS 项目),你会看到重复提示,甚至冲突:
- VSCode 默认优先显示 ESLint 的结果(如果装了
ESLint插件且启用了eslint.enable: true) - 某些规则(如未使用变量)TS 和 ESLint 都有,但默认行为不同:
no-unused-vars在 ESLint 中默认是"warn",而 TS 的noUnusedLocals默认是"warn",但开启strict后也不会自动升为 error - 解决冲突的关键是关掉其中一方:在
.eslintrc.js中禁用 TS 已覆盖的规则:rules: { "@typescript-eslint/no-unused-vars": "off", // 让 TS 自己管 "no-unused-vars": "off" } - 或反过来:关掉 TS 的检查,在
tsconfig.json中设"noUnusedLocals": "off",全交给 ESLint 控制
TS 的诊断级别最终由它的配置驱动,VSCode 只是忠实呈现。想改“是什么”,得动配置;想改“看起来像什么”,才动颜色;而两者混用时,不明确主次,就一定会反复踩坑。


















