默认JS补全常“卡住”是因为VSCode依赖jsconfig.json激活TypeScript语言服务实现语义补全,缺失该配置则退化为字符串匹配;需确保jsconfig.json置于根目录、启用JSDoc注释、正确安装@types包,并确认右下角显示TypeScript状态。

为什么默认的 JS 补全经常“卡住”或不出现
VSCode 原生对 JavaScript 的补全能力其实依赖于两个底层机制:一是基于文件符号的简单扫描(documentSymbols),二是 TypeScript 语言服务(即使没用 TS,只要项目有 jsconfig.json 或 tsconfig.json 就会启用)。但很多情况下,比如没配 jsconfig.json、第三方库没类型声明、或用了动态导入/eval,补全就会退化成纯字符串匹配——这时你输 arr. 可能只看到 length,而 mapfilter 等方法压根不弹。
必须配置 jsconfig.json 才能激活完整语义补全
这是最容易被跳过的一步,但直接影响 import 补全、模块路径提示、以及对象属性推断。没有它,VSCode 无法识别项目内模块结构,补全基本停留在“当前文件变量名”级别。
-
jsconfig.json必须放在项目根目录,且至少包含{"compilerOptions": {"allowJs": true, "checkJs": false}} - 如果用了别名路径(如
@/utils),需加"baseUrl"和"paths",否则import { foo } from '@utils'不会提示foo - 注意:
checkJs: true会触发 JSDoc 类型检查,补全更准,但可能拖慢大型项目启动
哪些插件真正提升 JS 补全质量,哪些只是“看起来热闹”
不是所有标着“JS 补全”的插件都值得装。真正起作用的是那些能增强类型上下文或对接语言服务器的插件:
-
JavaScript (ES6) code snippets:只提供模板代码片段(如输入for→ 补全 for 循环),不增强语义补全,但写法快 -
Path Intellisense:补全import路径时有效,尤其对相对路径深嵌套场景;但对 node_modules 内部模块无效 -
IntelliSense for CSS class names in HTML:和 JS 补全无关,纯 HTML/CSS 场景 -
TabNine或Github Copilot:基于 AI 预测整行代码,不依赖类型系统,适合补全逻辑块,但对 API 名称准确性不如语言服务器
真正关键的其实是 VSCode 自带的 TypeScript 插件(typescript-language-features)——它负责解析 JS 文件并提供智能建议。确保它没被禁用(在扩展列表里搜 “TypeScript” 查看是否启用)。
JSDoc 是不用 TS 也能获得精准补全的最简方案
当你没法立刻迁移到 TypeScript,又想让 /** @type {Array<string>} */ const list = [];</string> 这类注释生效,必须确认两点:
- VSCode 设置中
javascript.suggestionActions.enabled是true(默认开启) - 不要把 JSDoc 写在函数体内部——只有变量声明、参数、返回值上方的注释才会被识别
- 复杂类型尽量用
@typedef单独定义,避免一行写太长导致解析失败
例如:/** @typedef {{ id: number; name: string }} User */ 后再写 /** @type {User[]} */ const users = [];,这样 users[0]. 才能准确提示 id 和 name。
补全失效往往不是插件没装够,而是类型上下文断了——jsconfig.json 缺失、JSDoc 位置错、或语言服务没加载成功。先检查状态栏右下角有没有“TypeScript”字样和版本号,没有就说明语言服务根本没起来,装再多插件也没用。


















