vscode不报typescript类型错误,根本原因是语言服务未正确接管:未启用工作区ts版本、tsconfig.json未生效、存在@ts-nocheck或skiplibcheck、ts server未重启。

VSCode 默认不校验 TypeScript 类型,装了插件也不生效——根本原因是没配对语言服务接管权,不是插件没装全。
为什么 TypeScript 类型校验不触发
常见错误现象是:.ts 文件里写错类型(比如 const x: number = "hello"),但编辑器毫无报错,保存也不提示。这不是 ESLint 或 Prettier 的事,而是 VSCode 没启用真正的 TS 语言服务。
- 只装了官方
JavaScript and TypeScript插件,但没启用Pylance(Python 场景)或Volar(Vue 场景),TS 就走基础语法高亮,不跑类型检查 - 项目有
tsconfig.json,但 ESLint 没配parserOptions.project,导致no-unused-vars等规则无法识别类型作用域 - VSCode 设置里开了
typescript.preferences.includePackageJsonAutoImports,却关了typescript.suggest.autoImports,补全能出但类型推导断链
TypeScript 项目必须启用 Volar 或 TypeScript Server
Vue 3 项目里,Volar 不是“可选增强”,而是唯一正解。它接管 .vue 文件的整个语言服务,包括 <script setup></script> 中的响应式类型、defineProps 推导、模板属性提示。Vetur 已弃用,装了反而冲突。
- 安装
Volar后,必须在设置中开启Volar: Take Over Mode,否则 .ts 文件仍走旧 TS 服务,类型校验失效 - 若用
unplugin-vue-components自动导入组件,需额外装volar-plugins才能让组件名出现在补全列表 - 禁用
Vetur的vetur.validation.template,否则模板校验会双倍报错
ESLint + TypeScript 配置关键三步
ESLint 单独跑 JS 规则没问题,但一进 TS 就哑火——90% 是因为没切断和 Prettier 的规则打架,也没告诉 ESLint 去读 tsconfig.json。
- 必须安装
eslint-config-prettier并在extends里末尾引入,否则quotes、semi等格式规则和 Prettier 冲突,直接报红 -
parserOptions.project必须显式指向项目根目录下的tsconfig.json,不能留空或写错路径,否则泛型、接口、模块导入全部推导失败 - VSCode 设置中
eslint.run推荐设为onType,而不是onSave,否则改一行要等保存才看到类型错误提示
Python 类型校验靠 Pylance,不是 Python 插件本身
只装微软官方 Python 插件,Ctrl+Click 会跳到 stub 文件而非真实源码,hover 看不到参数类型,refactor 也常失败。这是因为底层语言服务没换。
-
Pylance必须和Python插件共存,且Python: Select Interpreter必须指向正确环境(poetry/conda/virtualenv),否则无法识别本地包类型 -
Ruff的ruff.format.enable默认关闭,需手动打开;它替代black+flake8,但不提供类型检查——那是 Pylance 的活 - 如果项目用了
pyright,要关掉它,否则和 Pylance 抢占语言服务,导致类型提示时有时无
最易被忽略的是:类型校验是否真正“接管”了当前文件。右下角状态栏看语言模式是不是 Vue (Volar) 或 TypeScript (Pylance),而不是 TypeScript 或 Vue —— 少了括号里的名字,说明服务没生效。











