vscode 看不到 js 函数返回值的核心原因是未执行而仅靠静态推断,需配置 jsconfig.json(含 "checkjs": true)、正确书写 jsdoc 注释并开启 inlayhints.enabled。

VSCode 看不到 JS 函数返回值,核心原因就一个:它没在“执行”,只靠静态推断——而推断需要明确线索,不是靠猜。
jsconfig.json 必须存在且 checkJs: true
没有 jsconfig.json,VS Code 的 JavaScript 语言服务会退化为“语法高亮+基础补全”,类型推断基本失效。即使你写了 return 'hello',hover 也只会显示 any。
- 文件必须放在项目根目录,名字严格是
jsconfig.json(不是.jsconfig或tsconfig.json) - 内容至少包含:
{ "compilerOptions": { "checkJs": true, "allowJs": true } } - 右下角状态栏应显示
JavaScript (Strict);若显示JavaScript (Simple),说明配置未生效 - 开启后大量报错?别关——多数是已有隐式
any,补上@param/@returns就能收敛
JSDoc 是最稳的返回值标注方式
VS Code 对 JSDoc 的支持远强于对运行时行为的猜测。哪怕函数里有 if 分支、异步逻辑或对象解构,手动标注仍比等编辑器“想明白”快得多。
详细的 Three.js 3D 图形参考,涵盖场景设置、相机、几何体、材质、光照、动画、控制器、加载器、数学工具和调试。
- 基础写法:
/** @returns {string} */,比return 'x'更有效 - 异步返回要写全:
/** @returns {Promise} */ - 可能为空时显式声明:
@returns {User|null},否则user?.name提示可能丢失 -
@typedef可复用复杂类型:/** @typedef {{ id: number; tags: string[] }} User */,再写@returns {User} - 注释必须紧贴函数上方,中间不能有空行——多一个换行,JSDoc 就被忽略
内联提示(Inlay Hints)要开对开关
返回值类型想直接显示在 const x = foo() 右侧,得靠 inlayHints.enabled,但它和语言设置是解耦的,容易漏配。
- 全局开关必须为 true:
"inlayHints.enabled": true(注意不是editor.inlayHints.enabled) - JS/TS 项目还需:
"typescript.preferences.includeInlayVariableTypeHints": "all" - 字体太小或主题对比度低会导致“看不见”,临时加
"editor.inlayHint.fontSize": 13验证 - 如果
foo()调用处没提示,但 hover 能看到返回类型,说明 Inlay Hints 开了但变量类型推导失败——大概率缺 JSDoc 或jsconfig.json没生效
别信悬停,调试才是最终答案
编辑器推断再准,也不如断点跑一次。特别是涉及第三方库返回结构、动态 import()、环境变量分支或 mock 数据时,hover 提示很可能过时、缺失,甚至误导。
- 用 Quokka 快速验证:
foo() /**?*/会在行尾实时显示真实返回值 - Chrome DevTools 或 VS Code Debugger 中设断点,看
console.log(foo())实际输出 - API 响应结构变化频繁时,
@returns注释建议从实际响应 copy-paste,而非凭印象手写
最常被忽略的其实是三件事:jsconfig.json 文件名拼错、JSDoc 和函数之间多了空行、内联提示开了但变量类型根本没推出来——它们不报错,只是沉默地不显示。










