根本原因是语言服务未加载或配置被覆盖;需确认语言模式正确、重启ts/python服务器、检查配置文件存在性及模块路径声明,并确保相关设置为布尔值true而非字符串。

为什么改了设置还是不按预期导入
根本原因不是规则没生效,而是语言服务压根没加载或配置被覆盖。VSCode 的自动导入逻辑由 TypeScript Server、Pylance 等语言服务器驱动,typescript.suggest.autoImports 和 python.analysis.autoImportCompletions 这类设置只在服务就绪后才起作用。如果右下角显示 Plain Text、JavaScript (Deprecated) 或状态栏没有齿轮图标,说明语言模式错误或服务崩溃——此时改任何规则都无效。
- 先打开命令面板(
Ctrl+Shift+P),运行TypeScript: Restart TS server或Python: Restart Language Server - 检查项目根目录是否存在
tsconfig.json(TS)或jsconfig.json(JS),哪怕内容只是{"compilerOptions": {}} - 打开开发者工具(
Developer: Toggle Developer Tools),Console 里若报Cannot find module 'typescript',说明本地没装 TypeScript 包或路径异常
修改 JavaScript/TypeScript 自动导入行为
原生支持的自动导入规则集中在补全触发时机和路径生成逻辑上,不支持自定义排序或分组,但可精细控制是否启用、何时插入、如何解析别名。
-
typescript.suggest.autoImports和javascript.suggest.autoImports必须设为布尔值true(不是字符串"true"),否则 Ctrl+Space 不会显示带 import 前缀的选项 - 路径别名(如
@/hooks)必须在tsconfig.json的compilerOptions.baseUrl和compilerOptions.paths中声明,VSCode 完全忽略 Webpack/Vite 的resolve.alias - 想让 import 语句保存时自动整理(增删+排序),需配
"editor.codeActionsOnSave": {"source.organizeImports": true};它只作用于当前文件,不跨文件扫描
修改 Python 自动导入行为
Python 的自动导入依赖 Pylance,规则修改围绕索引范围、提示触发方式和语言服务器选择展开,不能像 ESLint 那样写正则匹配规则。
- 确保
python.languageServer设为"Pylance"(字符串,带双引号),禁用 Jedi —— 否则Ctrl+.压根不弹 Quick Fix -
python.analysis.autoImportCompletions控制是否在 IntelliSense 中显示 import 建议,必须为true;同时要开editor.quickSuggestions.other,否则输pathlib.根本不触发下拉 - 本地模块(如
utils.py)只有在工作区根目录下、且被 Pylance 成功索引后才能被建议导入;放在未打开的子文件夹里,再怎么配都无效
别指望插件完全接管规则
像 Auto Import - TypeScript(steoates 版)这类插件能增强别名识别和跨目录查找,但它不替代语言服务,只是叠加一层静态分析。它无法改变 import { foo } from 'bar' 还是 import foo from 'bar' 的默认格式——那是由目标模块的类型定义(export default 还是 export const foo)决定的,VSCode 不做主观推断。
- 插件的
auto-import.showImportInSuggestions只是让 import 项更显眼,不改变插入逻辑 - 真正影响 import 写法的是库自身的类型声明文件(
.d.ts)和tsconfig.json中的allowSyntheticDefaultImports、esModuleInterop等编译选项 - 如果你发现 import 总是写成命名导入而非默认导入,先检查该模块是否导出了
default,而不是去调插件设置











