peek definition 默认显示类型声明而非函数源码,是 typescript/js 语言服务优先返回类型定义的设计行为;要查看真实函数体,应使用 peek implementation(shift+alt+f12),并确保项目有有效 tsconfig.json/jsconfig.json 且第三方库含源码。

Peek Definition 为什么总是弹出类型声明,而不是函数源码?
默认行为就是只返回类型定义(比如 index.d.ts 或 declare 行),这不是故障,是 TypeScript/JS 语言服务的优先级设计。它先找类型,再找实现。
- 要看到真实函数体,必须用
Peek Implementation(快捷键Shift+Alt+F12/Shift+Option+F12),尤其对类方法、ESM 导出函数更准 - 确保项目根目录有有效的
jsconfig.json或tsconfig.json,且含"moduleResolution": "node"和"allowSyntheticDefaultImports": true - 第三方库若只有
@types/xxx没有实际源码(如node_modules/xxx/src),Peek Implementation也会 fallback 到类型声明——这时不是配置问题,是物理上没源码
Peek 窗口关不掉、尺寸太小、按 Esc 没反应?
这是高频干扰点,VSCode 默认 Peek 弹窗不支持拖拽、缩放、记忆位置,Esc 键还常被系统快捷键劫持(尤其是 macOS 的 Spotlight)。
- 增大高度:在
settings.json中加"editor.peekWidgetDefaultHeight": 400 - 避免焦点乱跳:关掉自动补全干扰,设
"editor.quickSuggestions": false和"editor.suggestOnTriggerCharacters": false - 强制绑定关闭:在
keybindings.json中显式把editor.action.hideSuggestWidget绑定到Esc,覆盖系统冲突
Peek Definition 没反应,但 Go to Definition 可以?
说明语言服务已启动、符号可索引,但 Peek 触发条件更苛刻。常见卡点不在插件,而在上下文识别。
- 语言服务器没真正就绪:比如 Python 扩展装了,但
python.defaultInterpreterPath指向一个不存在或无pylsp的环境,Peek 会静默失败 - 文件未被语言服务接管:打开的是
Untitled-1,或后缀如.inc、.tpl未关联对应语言模式(右下角状态栏看是否显示“Plain Text”) - 符号本身不可 Peek:内置 API(
console.log)、eval动态生成变量、宏展开后的标识符,语言服务器无法静态推导定义位置
HTML 中 class/id 无法 Peek 到 CSS 定义?
CSS Peek 插件依赖静态路径解析,对运行时注入、CDN 引入或构建产物路径不敏感。
- 只认工作区内的相对路径,如
href="css/style.css";href="https://cdn.example.com/style.css"必然失效 - 不处理
<style></style>内联块,也不解析 CSS-in-JS 或 CSS Modules 输出的哈希类名 - 若失效,可换用
CSS Navigation插件,它对import语句和部分构建产物兼容性稍好
tsconfig.json 或一个正确的工作区打开方式。











