Typescript导入报错:module-b中未找到'remAuto'导出如何解决?
问题根因
触发警告的核心是ES模块导入导出语法不匹配,且Typescript严格遵循ES模块规范,没有做JS环境下的CommonJS隐式兼容:
- 模块B使用
export default导出了包含remAuto属性的对象,属于默认导出 - 模块A使用命名导入语法
import { remAuto } from 'module-b',只会匹配模块B显式声明的命名导出项,不会自动从默认导出的对象中检索属性
纯JS运行时没有报错是因为Webpack的CommonJS兼容逻辑会隐式把默认导出对象的属性合并到命名导出集合中,该行为不符合ES模块规范,所以Typescript默认会校验拦截。
解决方案
任选以下一种方案修改即可:
方案1:调整模块B的导出语法,新增命名导出
修改模块B的index.js文件,同时保留原有默认导出逻辑避免影响其他依赖:
// index.js import { remAuto } from './src/utils'; // 新增命名导出 export { remAuto }; // 保留原有默认导出 export default { remAuto };
方案2:调整模块A的导入语法,匹配默认导出规则
修改模块A的导入逻辑,先导入默认对象再解构取值:
// somefile.tsx import moduleB from 'tidee-life-theme'; const { remAuto } = moduleB;
可选兼容配置
如果不想修改业务代码,也可以在tsconfig.json中开启以下兼容配置,适配旧的CommonJS导出逻辑:
{ "compilerOptions": { "esModuleInterop": true, "allowSyntheticDefaultImports": true } }
注:该配置仅做类型层面的兼容,实际运行时逻辑需要和Webpack的模块转换规则匹配,优先推荐修改导入导出语法的方案,兼容性更强。
内容的提问来源于stack exchange,提问作者JoeTidee
相关产品推荐
相关产品推荐

