为了让图片导入有类型,补了一段通配的模块声明,结果所有导入都有了类型,可业务代码的推导跟着变成任意类型,函数返回值也失去了补全提示。日志里能对上时间点,这种反而好排。

通配声明写得太宽,匹配到了不该匹配的路径,或者声明后面没写具体模块名被当成兜底规则,整个项目的类型解析都被这一条接管。这一点先确认清楚,后面就不用反复试。

declare module '*.svg' {
  const src: string;
  export default src;
}
// 只保留这一条,别写更宽的匹配规则

「declare module 全局声明」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。

处理上按这个顺序:检查通配声明的匹配范围是不是放得太宽了一些;每种资源都单独写一条精确一点的模块名声明;确认没有在全局脚本里面重复声明同一个模块。

结果对不对很好判断,只有图片导入走这条声明,其它模块的类型提示恢复正常,推导不再退化。

作者 9823189