vscode 的 js 类型提示需 jsconfig.json(含 "checkjs": true)与严格格式的 jsdoc 共同激活:注释须紧贴函数、类型拼写必须准确(如 {string} 非 {string})、空行或配置缺失即导致提示失效。

VSCode 写 JS 时类型提示不是“可选功能”,而是必须靠 jsconfig.json + 正确 JSDoc 注释共同激活的底层能力——不配就几乎没提示,配错就只提示一半。
为什么写 JS 还要配 jsconfig.json
VSCode 的 JavaScript 语言服务默认是“轻量模式”,对类型推导非常保守。不加配置时,/** */ 注释会被识别,但悬停看不到参数类型、调用时不会报 string 传成 number 的错、.map() 的回调参数也无提示。
- 必须在项目根目录放
jsconfig.json,内容至少含:{"compilerOptions": {"checkJs": true, "allowJs": true}} -
checkJs: true是开关:它让语言服务把.js文件当“带类型的 JS”来分析,否则 JSDoc 类型直接被忽略 - 文件里有
// @ts-nocheck会覆盖该设置,删掉或换成// @ts-check - 如果项目已有
tsconfig.json,且"allowJs": true和"checkJs": true都开了,jsconfig.json可以不用
/** */ 注释紧贴函数,中间不能有空行
这是最常导致提示失效的硬性规则:VSCode、Document This、jsdoc CLI 全部依赖“注释块与函数声明之间零间隔”的语法位置关系。
- ✅ 正确:
/** @param {string} name */ function greet(name) {} - ❌ 错误:
/** @param {string} name */\n\nfunction greet(name) {}(中间多一行,悬停就变“no type info”) - 箭头函数、解构参数、默认值等复杂签名,原生
/**回车大概率抽风,此时别硬等自动填充,手动补全更稳 - 函数名前有
export、async、const等关键字时,Document This 插件可能识别失败,建议光标放在function关键字上再按快捷键
类型写法错一个字母,提示就断掉
VSCode 不校验类型拼写,但会严格按你写的文本去匹配内置类型库和已导入模块。写错就等于没写。
- 基础类型必须小写:
{string}、{number}、{boolean}({String}是构造函数,不是类型) - 数组/对象要具体:
{Array<string>}</string>、{User[]}、{{ id: number; name: string }} - Promise 必须写全:
{Promise<string>}</string>,否则.then(res => ...)里res无类型 - 第三方类型用
import():{import('axios').AxiosInstance},而不是瞎猜的{Axios} - 写成
{*}或留空,等于放弃类型,连基本参数名提示都会弱化
Document This 插件怎么用才不翻车
它比原生 /** 回车靠谱,但触发逻辑和配置很关键,不是装了就能用。
- 快捷键默认是
Cmd+Alt+D(macOS)或Ctrl+Alt+D(Windows/Linux),但输入法常劫持这个组合,需进 VSCode 键盘快捷方式里重映射 - 光标必须落在函数定义行(如
function foo(a, b)这整行),不能在export上,也不能在函数体里 - 开启
documentthis.includeDescription和documentthis.jsdocReturnType,否则不生成描述、也不尝试从return推断返回类型 - 对箭头函数支持差,
const fn = (a) => a;很可能漏参数,优先用于function声明 - 插件已停止更新,但 2026 年仍可用;若遇兼容问题,可换用
ES7+ React/Redux/React-Native snippets中的 JSDoc 片段(输入jsdoc+ Tab)
真正卡住人的从来不是“会不会写 @param”,而是 jsconfig.json 没生效、注释和函数之间多了个空行、类型拼错了大小写——这三处一错,整个类型提示链就断了,后面再怎么补注释都没用。











