You need to enable JavaScript to run this app. Jest测试含泛型的TypeScript装饰器类时编译报SyntaxError如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Jest测试含泛型的TypeScript装饰器类时编译报SyntaxError如何解决

Babel 转译TypeScript泛型装饰器报错修复

报错核心原因

Babel在处理测试流程时没有启用TypeScript语法解析能力,默认按照纯JavaScript规则解析.ts文件,碰到函数定义里的泛型标记<T>这类TypeScript专属语法时,就会抛出Unexpected token, expected "("的解析错误。
平时启动项目不报错,是因为你start脚本直接用ts-node运行代码,ts-node会读取tsconfig.json配置全量处理TS语法和装饰器逻辑,完全不经过Babel转译,和测试流程的转译链路完全独立。

具体修复步骤

  • 补全Babel配置的TypeScript预设
    你已经在devDependencies里安装了@babel/preset-typescript,但没有在babel.config.js中引入。需要调整配置结构,注意Babel的执行顺序是从后往前加载preset、从前往后加载插件,要保证先完成TS语法解析,再处理兼容转译和装饰器逻辑,修改后的babel.config.js如下:
    module.exports = {
      presets: [
        ['@babel/preset-env', {
          targets: {
            node: 'current'
          }
        }],
        '@babel/preset-typescript'
      ],
      plugins: [
        ["@babel/plugin-proposal-decorators", {
          legacy: true
        }]
      ]
    }
    
  • 移除冗余冲突依赖
    项目devDependencies里安装的babel-preset-typescript(alpha版本)、babel-preset-esnext、babel-preset-es2020都是废弃的第三方包,和官方@babel系列预设逻辑冲突,直接从依赖列表中删除,避免Babel错误加载配置。
  • 补全Jest的转译匹配规则(可选)
    如果修改完上述配置后,Jest仍然无法识别TS文件,需要在项目根目录新增jest.config.js,明确TS文件的转译处理器:
    module.exports = {
      transform: {
        '^.+\\.(ts|tsx|js)$': 'babel-jest'
      }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 03:54:07