vs code代码补全体验取决于核心引擎选择与配置:优先单用copilot或tabnine避免冲突;正确设置typescript.tsdk指向项目内ts版本;eslint需配置import/resolver以支持路径别名补全。

VS Code 的代码补全体验,不取决于插件数量,而取决于你用的是哪几个核心补全引擎——多数人装了一堆“智能补全”插件,结果 IntelliSense 反而变卡、import 提示错乱、type 推导失效。
别让 TabNine 和 GitHub Copilot 同时开机
两者都监听 onType 事件、劫持 editor.suggest 面板,冲突后常见现象是:输入 use 后弹出空白建议框,或按 Ctrl+Space 卡死 2 秒。它们底层都依赖本地模型推理,同时运行会吃光内存(尤其 M1/M2 Mac)。
- 只留一个主力:前端优先选
Copilot(对 React/Vue/TS 生态理解更深);纯 JS/Python 小项目可换TabNine(离线可用,隐私敏感场景更稳) - 关掉另一个的自动触发:
"tabnine.experimentalAutoImports": false或"github.copilot.inlineSuggest.enable": false(避免内联建议和下拉列表打架) - 确认冲突是否存在:打开命令面板 → 运行
Developer: Toggle Developer Tools→ 切到 Console,敲几下触发补全,看是否有Extension host terminated unexpectedly
typescript.tsdk 路径配错,interface 补全直接消失
TypeScript 补全是 VS Code 自带能力,但严重依赖工作区里实际使用的 tsc 版本。很多人全局装了 typescript@5.3,项目却用 4.9,VS Code 拿错语言服务,结果 Array.prototype.map 能补全,但自定义 MyContext 类型完全不出现。
- 检查路径是否指向项目内
node_modules:"typescript.tsdk": "./node_modules/typescript/lib"(注意是lib目录,不是bin/tsc) - 验证是否生效:打开任意
.ts文件 → 命令面板 →TypeScript: Select TypeScript Version→ 看底部状态栏是否显示 “Workspace version” - Monorepo 场景下,每个子包必须单独配置
tsconfig.json和typescript.tsdk,父级配置不继承
eslint-plugin-import 的 resolve 配置影响 import 补全路径
VS Code 的路径补全(比如输入 import { foo } from ' 后自动列出 utils/、hooks/)其实由 ESLint 插件驱动,而非 TypeScript。如果 eslint-plugin-import 的 settings.import/resolver 没配对,补全会漏掉 @/components 这类别名路径,甚至把 src/api 显示成 ../../api。
- 确保
.eslintrc.js里有正确 resolver:settings: { 'import/resolver': { node: { paths: ['src'], extensions: ['.js', '.jsx', '.ts', '.tsx'] } } } - VS Code 不读
webpack.config.js或vite.config.ts,别指望它自动识别alias;必须显式同步到 ESLint 配置 - 重启 ESLint 服务:命令面板 →
ESLint: Restart ESLint Server(改完配置后必做,否则补全缓存不刷新)
补全不是越“聪明”越好,而是越贴合当前项目的类型系统、路径规则、依赖版本,就越稳定。很多人调了半天 copilot 的 prompt 模板,却没花 30 秒确认 typescript.tsdk 指向哪里——这才是最常被跳过的那一步。











