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

ts-jest中Optional Chaining在tsConfig target为ESNext/ES2020/ES2021时不生效问题

问题根因

当你将TS编译target设置为ES2020及更高版本时,TypeScript默认不会对可选链?.、空值合并运算符??等ES2020原生支持的语法做降级转译,会直接保留原生语法输出。如果当前你运行jest的Node.js版本低于14.0.0,Node runtime本身不支持这些ES2020新语法,就会触发运行异常。
而当target设为ES2019时,TS会自动将可选链语法转译为兼容的三元判断表达式,低版本Node也可以正常运行,所以不会报错。

解决方案

  • 方案1:升级Node.js版本到14.0.0及以上,Node 14版本已完整支持ES2020全量语法特性,升级后即可正常使用ES2020+的target配置,不需要修改现有编译逻辑。
  • 方案2:如果无法升级Node版本,可以保持当前配置,单独在ts-jest的全局配置中将ts编译target指定为ES2019,该配置不会覆盖你项目全局的tsconfig.json设置,仅对jest测试场景生效:
{
    // 其余jest配置保持不变
    transform: {
        '^.+\\.(ts|tsx)$': 'ts-jest',
    },
    globals: {
        'ts-jest': {
            tsConfig: {
                target: 'ES2019',
            },
        },
    },
}
  • 方案3:如果需要保留ES2020+的target同时兼容低版本Node,可新增babel做二次转译,配置@babel/preset-env根据当前Node版本自动做语法降级。

快速排查步骤

运行node -v命令查看本地Node.js版本,确认是否低于14.0.0,即可快速验证上述根因是否匹配你的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:54:01