必须禁用vetur、手动将.vue语言模式设为vue、配置tsconfig.json的types为["vue"]并重启ts服务,三步缺一不可;右下角显示“vue”且console中出现registering vue language features才算volar真正接管。

装了 Volar 不等于 Vue 项目就能有类型提示——defineProps 报红、ref() 类型是 any、 里变量不着色,90% 是因为 Volar 根本没接管 .vue 文件或 TypeScript 服务。必须同时满足三件事:禁用冲突插件、手动切换语言模式、配对 tsconfig.json,缺一不可。
怎么确认 Volar 真正接管了 .vue 文件
右下角显示 “Vue (Vetur)” 或 “HTML” 就说明没接管成功,哪怕插件已安装并启用。
- 打开任意
.vue文件,点击右下角语言模式标签(比如当前显示HTML)→ 选 Configure File Association for '.vue' → 输入vue回车(**不要选带括号的选项,如Vue (Volar)**) - 再点一次语言模式,手动从列表中选
Vue(状态栏必须显示干净的Vue字样,不是Vue HTML) - 按
Ctrl+Shift+P打开命令面板,运行Developer: Toggle Developer Tools,在 Console 里搜volar,看到Registering Vue language features才算激活 - 如果列表里压根没有
Vue,检查扩展面板中Vue.volar是否启用;若已启用但仍不出现,可能是Vetur残留或files.associations被覆盖
为什么 defineProps 报 Cannot find name 'defineProps'
这不是代码写错了,是 TypeScript 编译上下文根本没加载 Vue 类型声明,defineProps 是全局宏,TS 必须知道它在哪定义。
- 检查项目根目录
tsconfig.json的compilerOptions.types是否包含"vue",缺了这行就必报错 - 如果是 JS 项目,用
jsconfig.json,且types要写成["vue/types"],并确保已安装@vue/runtime-core - 改完配置后,必须手动重启 TS 服务:
Ctrl+Shift+P→ 输入Restart TS server→ 回车;只重载窗口或重启编辑器都不生效 -
tsconfig.json中不能把node_modules写进exclude字段,否则 Volar 找不到@vue/language-core
ref() 类型推导全是 any 怎么办
Volar 依赖 TypeScript 加载 @vue/runtime-core 类型定义来推导 ref<string>()</string>,但默认脚手架常设 "skipLibCheck": true,直接跳过所有 node_modules 下的类型。
- 找到
tsconfig.json的compilerOptions,确保"skipLibCheck": false(Vue 3.3+ 官方推荐设为false) - 如果用了
"extends"(比如"./tsconfig.base.json"),得去被继承的文件里改,只改当前文件无效 - 若项目用
pnpm,运行pnpm store path查路径,确认 VSCode 有权限读取(macOS 上偶尔因全盘访问权限静默失败) - 在
.vscode/settings.json中写入:"typescript.tsdk": "./node_modules/typescript/lib",强制指向项目本地 TS 版本
Vetur 和 Volar 能共存吗
不能。Vetur 已废弃,共存会导致语言服务打架,现象包括:ref 不提示类型、Ctrl+Click 跳转失效、defineEmits 下划线报错但代码完全合法。
- 卸载所有带 “Vetur” 字样的扩展(包括旧版 Vue 插件、
Vetur ESLint、Vetur Pug) - 禁用 VSCode 内置的
TypeScript and JavaScript Language Features:Ctrl+Shift+P→ 搜@builtin typescript→ 右键 → Disable (Workspace) - 重装 Volar 后,必须彻底退出 VSCode(包括托盘进程),再重新打开;仅
Reload Window不生效 - 打开命令面板,运行
Volar: Enable Take Over Mode并点 Yes,然后重启窗口;重启后右下角应显示Volar (Take Over),不是Vue或Vue (Volar)
真正卡住人的地方,往往不是配置项漏写了,而是改完没重启服务器、没重载窗口、或者 volar.server.config.json 文件名/路径/JSON 格式有一处不对——Volar 对这些极其敏感,且几乎不报错,只静默失效。











