You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

export default导出函数后,import返回对象而非函数致测试失败

问题原因及解决方案

问题根源

当使用await import(source)动态导入模块时,无论模块用export default还是命名导出,返回的都是模块命名空间对象。你测试用的示例文件通过export default syncFn导出函数,这个函数会挂载在模块对象的default属性上,而非直接作为import的返回值。你的代码直接把模块对象当成函数判断和调用,自然触发了"TODO - not a function"错误。

解决方案

有两种可行的修复方式:

方式一:修改getResult函数,提取默认导出

在获取模块对象后,取出其default属性作为目标函数,修改后的代码如下:

const getResult = async function (source: string): Promise<unknown> {
    let module;

    try {
        module = await import(source);
    } catch (error) {
        throw error;
    }

    // 提取默认导出的函数
    const resultFunction = module.default;
    if (typeof resultFunction !== 'function') {
        throw new Error("导出内容不是函数");
    }

    const result = await resultFunction();

    return result;
};

export { getResult };

方式二:修改示例文件为命名导出

如果想保持getResult函数逻辑不变,可以将测试示例文件改为命名导出:

export const syncFn = function () {
    return 'sync';
};

同时修改getResult内的判断和调用逻辑,使用对应的命名导出(比如resultFunction.syncFn),不过这种方式灵活性较低,需要提前知晓导出名称。

额外说明

若场景需要同时兼容默认导出和命名导出,可在getResult中增加判断逻辑:先检查模块对象是否有符合要求的命名导出,无则尝试使用default属性,具体逻辑可根据业务需求调整。

内容的提问来源于stack exchange,提问作者baitendbidz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 14:01:04