VSCode 不自动补全 index 文件是因为 TypeScript 模块解析需显式配置:tsconfig.json 中必须设 "moduleResolution": "node" 和 "resolveJsonModule": true,且 "javascript.suggest.autoImports" 与 "typescript.suggest.autoImports" 均需为 true。

为什么 import foo from './bar' 不自动补全 index 文件
VSCode 默认不把 ./bar 当作 ./bar/index.ts 或 ./bar/index.js 处理,除非语言服务明确知道该路径下存在可解析的默认导出。它不会主动“猜”你写了 import X from './utils' 就该去 ./utils/index.ts 里找 export default —— 这个行为由 TypeScript 的模块解析规则控制,不是 VSCode 自己决定的。
tsconfig.json 必须启用 moduleResolution: "node" 和 resolveJsonModule
即使你项目是 TS,如果 tsconfig.json 里没显式设 "moduleResolution": "node",TS Server 就按 classic 模式解析,直接跳过 index 查找逻辑。另外,如果你的 index.ts 里用了 JSON 导入(比如 import data from './config.json'),还得开 resolveJsonModule: true,否则整个路径链会中断。
- 确认
tsconfig.json中有:{"compilerOptions": {"moduleResolution": "node","resolveJsonModule": true}} - 如果用 JS 项目,
jsconfig.json同样需要"moduleResolution": "node",且建议加"checkJs": true - 改完配置后必须执行命令面板 →
TypeScript: Restart TS server,否则不生效
路径别名 + index 默认导出仍不工作?检查 baseUrl 和 paths 是否覆盖目标目录
比如你写了 import api from '@/api',期望它指向 src/api/index.ts,但 VSCode 却补全成 import api from '@/api/index' 或干脆不提示——大概率是 paths 配置没匹配到 index 文件本身。
-
paths规则只管路径映射,不管文件后缀或默认入口。所以"@/api/*": ["src/api/*"]是对的,但"@/api": ["src/api"]才能让import X from '@/api'正确解析到src/api/index.ts - 确保
src/api/index.ts确实有export default或export =(CommonJS 风格),且没有语法错误 - 如果
index.ts只做 re-export(如export { foo } from './foo'),那它本身没有默认导出,import xxx from就会失败,此时应改用命名导入:import { foo } from '@/api'
javascript.suggest.autoImports 和 typescript.suggest.autoImports 必须为 true
这是最常被忽略的一环:这两个设置默认是 false,尤其重装 VSCode 或重置设置后。它们控制的是「输入时是否在 IntelliSense 下拉里显示带 import 前缀的建议项」,不是“能不能识别模块”,而是“愿不愿意给你补全 import 行”。
- 打开
settings.json(Ctrl+, → 右上角“打开设置(JSON)”) - 确保包含这两行(拼写不能错):
"javascript.suggest.autoImports": true,"typescript.suggest.autoImports": true
- Vue 项目还需确认文件语言模式是
Volar(点状态栏右下角切换),否则 Vetur 会拦截建议
真正卡住的往往不是插件没装,而是 tsconfig.json 缺 moduleResolution、paths 没配 index 映射、或者那两个 autoImports 设置还关着——三者缺一,import X from 'xxx' 就永远等不到自动补全。


















