根本原因是语言服务未接管当前文件,而非插件缺失:VSCode默认仅对.ts文件启用完整TypeScript服务,.js文件需jsconfig.json触发类型推导;该文件须置于工作区根目录,且至少包含{"compilerOptions": {"allowJs": true, "checkJs": true}},否则模块解析、路径补全及JSDoc类型识别均失效。

为什么装了插件 JS 智能提示还是不生效
根本原因通常是语言服务没接管当前文件,而不是插件没装对。VSCode 默认只对 .ts 文件启用完整 TypeScript 语言服务;.js 文件必须有 jsconfig.json 才会触发类型推导和模块路径补全。
- 检查当前文件是否在
jsconfig.json所在目录或其子目录下(它只影响工作区根目录下的 JS 文件) - 确认
jsconfig.json至少包含:{"compilerOptions": {"allowJs": true, "checkJs": true}} - 如果用了 ESM(
"type": "module"在package.json中),需额外加"module": "nodenext"或"module": "es2020",否则import行无法跳转、无路径提示 - 插件如
JavaScript (ES6) code snippets只提供静态片段,不增强语义补全——别指望它让axios.get().then(自动展开参数
哪些插件真能提升 JS 智能提示准确度
真正起作用的是那些对接语言服务(LSP)或注入类型定义的插件,不是“代码片段”类工具。
-
@types/xxx:比如项目里用了lodash-es,装@types/lodash-es后,_.map(才会显示参数签名和返回值类型 -
Path Intellisense:补全import和require的相对路径,但仅限文件系统路径,不理解paths别名——得靠jsconfig.json的"paths"配合才生效 -
ESLint+typescript-eslint:虽然主职是校验,但它启动的语言服务会增强变量作用域分析,让const foo = ...在后续行中提示更稳 - 避免装重复功能插件:比如同时装
Auto Import和ESLint,可能因自动插入import语句导致类型服务短暂卡顿或提示延迟
jsconfig.json 配置里最容易写错的三项
多数 JS 项目卡在配置上,而不是插件没选对。这三项写错,90% 的模块导入提示、跳转、JSDoc 类型推导都会失效。
-
"baseUrl"必须是相对于jsconfig.json的路径,不是项目根目录绝对路径;写成"./src"是对的,"src"或"/src"都不行 -
"paths"的 key 必须带通配符,例如"@utils/*": ["src/utils/*"],漏掉末尾/*就无法匹配子路径 -
"typeRoots"如果你手动装了@types,但提示仍不出现,大概率是这里没指向node_modules/@types——默认值不总是可靠,显式写上更稳
JSDoc 注释怎么写才被 VSCode 真正识别
不是所有 /** */ 都有效。VSCode 只在特定位置解析 JSDoc,且对语法敏感。
- 函数返回值类型必须写在函数声明**正上方**,不能隔空行,也不能放在函数体内:
/** @returns {Promise<string>} */要紧贴function fetchName() { - 变量类型标注优先用
/** @type {Array<number>} */,写在声明语句前一行;写成const list = /** @type {number[]} */ ([]);效果弱很多 -
@typedef定义后,必须在同一文件或通过/// <reference path="./types.d.ts" />引入,否则其他文件里/** @type {MyType} */不生效 - 箭头函数不支持
@param直接标注,得用/** @type {(id: string) => number} */包一层
JS 智能提示的底层依赖是类型信息+模块解析+语言服务三者对齐,插件只是“搬运工”或“增强器”。最常被忽略的是:哪怕装了十个插件,只要 jsconfig.json 缺失或 baseUrl 写错,import 补全和符号跳转就永远灰掉。


















