← [ BACK_TO_NOTES ]

专题归档 · 2026 年 3 月(编辑分组,非实际写作日期)

MemoFlow:两个 Vite 依赖分支,为什么 TypeScript 说类型不兼容

pnpm Monorepo 中同名 Vite Plugin 出现类型不兼容,如何追查重复依赖。

错误提示最奇怪的地方

旧项目在 vite.config.ts 配置 Electron 插件时,TypeScript 报过 No overload matches this call。堆栈里甚至出现了近似“同名的类型互不兼容”的描述:Plugin<any> 看起来还是那个 Plugin<any>,为什么不能传进去?

真正值得看的不是报错文字第一行,而是两个类型的导入来源路径。

从 pnpm 路径看见了两套依赖身份

原始堆栈显示,项目里存在两套相同 Vite 版本、但附着不同 @types/node 与 jiti 组合的依赖路径。堆栈的深处还出现 _pluginContextMap 这样的私有属性;带私有成员的类类型不会仅凭外形一致就被认为可兼容。

这次排障思路因此从“插件类型声明写错了吗”转到“为什么这个项目装出了不同身份的 Vite 插件类型”。

当时记录的修复方向

笔记给出的处理是收敛相关依赖分支,并用 pnpm override 显式约束容易分叉的版本。这里重要的是消除重复类型来源,而不是机械复制当时的具体版本号——项目后来升级时,固定旧版本可能产生新的冲突。

这次先将问题缩小到了重复依赖可能造成两份插件类型的方向。要确认是否真正消除错误,还要对照锁文件、干净安装后的依赖树及 TypeScript 检查结果。

创建于 2026/3/5 更新于 2026/10/17
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本