补全失效时先看语言模式和语言服务状态:右下角若显示plain text或javascript react,需手动切为javascript;确认项目根目录存在jsconfig.json(含allowjs、checkjs等配置),并检查developer tools中是否有tsserver启动失败日志。

补全失效时先看语言模式和语言服务状态
VSCode 的 JavaScript 补全不是靠插件“开个开关”就生效的,而是依赖内置的 TypeScript 语言服务(tsserver)运行。如果右下角显示的是 Plain Text 或 JavaScript React 但没识别出项目结构,补全基本就是空的。
常见现象:console. 不弹方法、require() 后无路径提示、第三方库如 lodash 没属性建议。
- 点击右下角语言标识,确认是
JavaScript(不是JavaScript React或Plain Text) - 按
Ctrl+Shift+P运行Developer: Toggle Developer Tools,切换到 Console 标签页,看是否有Failed to start tsserver或Cannot read property 'getProgram' of undefined - 检查项目根目录是否存在
jsconfig.json或tsconfig.json;没有的话,补全退化为纯字符串匹配,几乎不推断类型
jsconfig.json 是 JS 补全质量的分水岭
很多用户装了一堆插件却没效果,根本原因是缺 jsconfig.json——它告诉语言服务“这个项目怎么组织、哪些路径可导入、要不要检查 JS 类型”。没有它,import 补全、路径自动完成、JSDoc 推断都弱得离谱。
最小可用配置只需两行:
{
"compilerOptions": {
"allowJs": true,
"checkJs": true,
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
}
},
"include": ["**/*.js", "**/*.jsx"],
"exclude": ["node_modules"]
}
-
"checkJs": true才能让 JSDoc 注释真正起作用,比如/** @type {Array<string>} */ const arr = [];</string>后arr.才有map/filter提示 -
"baseUrl"和"paths"是路径别名补全的前提,否则import utils from '@utils/helper';中的@utils/不会提示子路径 - 如果项目用 ESM 且含
exports字段,确保jsconfig.json在 package.json 同级目录,否则 tsserver 可能读不到
第三方库补全必须靠 @types 或内建 d.ts
原生 JS 调用 axios、moment、react-router-dom 等库时没提示?不是 VSCode 不行,是它根本不知道这些函数返回什么、参数长啥样。
详细的 Three.js 3D 图形参考,涵盖场景设置、相机、几何体、材质、光照、动画、控制器、加载器、数学工具和调试。
解决路径只有一条:让类型定义文件(.d.ts)进入语言服务上下文。
- 优先安装官方类型包:
npm install --save-dev @types/axios(注意包名严格对应,@types/react-router≠@types/react-router-dom) - 部分库自带
types字段(如zod、valibot),装本体即可,不用额外装@types - 若库无类型定义,可用 JSDoc 手动锚定:
/** @type {import('axios').AxiosInstance} */ const api = axios.create(...) - 避免全局污染:
types字段写在jsconfig.json里(而非compilerOptions.types),否则可能误注入所有 JS 文件
插件不是越多越好,关键插件只有三个
装一堆“JS 补全增强”插件反而容易冲突,尤其当多个插件注册了相同触发字符(如 .)时,tsserver 的响应会被拦截或降级。
真正必要且低干扰的插件就这三个:
-
ESLint:不是为了补全,但开启javascript.validate.enable后,它会把类型错误反馈给语言服务,间接提升补全稳定性 -
Path Intellisense:专攻require()/import中的相对路径补全,比原生更准,且支持jsconfig.json的paths -
JavaScript (ES6) code snippets:提供clg→console.log()这类快捷片段,和语言服务无关,纯文本替换,不抢 tsserver 的活
其他标榜“AI 补全”“智能预测”的插件(如 Tabnine、CodeWhisperer)在 JS 场景下实际效果有限,还常因网络延迟拖慢 Ctrl+Space 响应——补全质量卡在类型系统,不在模型大小。










