ESLint检测报错:默认导出的ES6函数被判定为非函数类型
解决TypeError: namespace is not a function问题
问题根源
你在类库的index.js中把目标函数包装成了对象属性默认导出,但在项目的usedfile.js中直接把导入的对象当作函数调用,导致类型不匹配触发报错。
你的类库当前导出结构示例
// namespace.js(类库) export default function myNamespace(param) { // 函数逻辑 } // index.js(类库) import namespace from './namespace.js'; export default { namespace }; // 这里把函数包装成了对象属性
当你在项目中导入后直接调用:
// usedfile.js(项目) import namespace from 'my-lib'; namespace(); // 此时namespace是一个对象,不是函数,自然报错
两种可行解决方案
方案1:修改类库导出逻辑(推荐)
直接将namespace.js的函数作为index.js的默认导出,无需包装对象:
// index.js(类库) import namespace from './namespace.js'; export default namespace; // 直接导出函数本身
修改后项目中的调用代码无需改动,namespace()即可正常执行。
方案2:保持类库结构,修改项目调用方式
如果必须保留对象导出的结构,需要调整项目中的导入和调用逻辑:
- 方式A:通过对象属性访问函数
// usedfile.js(项目) import lib from 'my-lib'; lib.namespace(); // 调用对象中的函数属性
- 方式B:解构导入目标函数
// usedfile.js(项目) import { namespace } from 'my-lib'; namespace(); // 直接调用解构得到的函数
验证步骤
- 修改类库代码后,重新打包类库(如果需要)
- 在项目中执行
yarn reinstall my-lib更新依赖 - 重新运行ESLint检测,确认报错消失
内容的提问来源于stack exchange,提问作者Jetro Olowole
相关产品推荐
相关产品推荐

