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

添加可选链语法后Jest测试报OptionalMemberExpression类型错误如何解决

问题根因

这个报错和可选链插件本身配置无关,错误栈指向babel-plugin-rewire插件,是该插件低版本不支持可选链语法的AST结构导致的:旧版本babel-plugin-rewire校验OptionalMemberExpression(可选链对应的AST节点)的属性时,默认认为属性只能是标识符(Identifier),但?.getSomething(param)这种可选链后接函数调用的场景,对应的AST节点是CallExpression,触发了校验失败的报错。

解决方案

按以下步骤操作即可修复:

  • 升级babel-plugin-rewire到最新稳定版,新版本已经兼容可选链、空值合并运算符等新语法的AST结构:
    执行安装命令:
    # npm 环境
    npm install babel-plugin-rewire@latest -D
    # yarn 环境
    yarn add babel-plugin-rewire@latest -D
    
  • 调整babel插件加载顺序,确保@babel/plugin-proposal-optional-chaining放在babel-plugin-rewire之前加载。babel插件按从前到后的顺序执行,让可选链语法先被转译为ES5兼容语法,再交给rewire处理即可避免识别异常,babel.config.js配置参考:
    module.exports = {
      // 其他presets配置...
      plugins: [
        "@babel/plugin-proposal-optional-chaining",
        // 其他前置babel插件...
        "babel-plugin-rewire"
        // 其他后置babel插件...
      ]
    }
    
  • 清理缓存后重新执行测试,避免babel/jest的旧缓存影响:
    npx jest --clearCache
    

如果升级后仍存在兼容问题,可以用jest自带的模块mock能力替代babel-plugin-rewire的功能,彻底规避插件冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:54:02