できない.dev

Jest で TypeScript が「SyntaxError: Unexpected token」で実行できない

Jest 自体は TypeScript を理解しない。
ts-jest プリセットか @babel/preset-typescript で .ts / .tsx を実行時に変換する設定が無いと、型注釈や import の位置で Unexpected token になる。

公開:

要約

Jest 自体は TypeScript を解釈しない。

ts-jest か Babel(@babel/preset-typescript)で、テスト実行時に .ts / .tsx を JavaScript へ変換する設定が必要になる。

その設定が無いと、型注釈や import 文の位置で「SyntaxError: Unexpected token」が出る。
型検査つきで動かすなら ts-jest、速度優先なら Babel が定番。

よくある原因

  1. トランスフォーマ未設定: preset: 'ts-jest' も Babel の TypeScript preset も無い。
  2. Babel に TypeScript preset が無い: @babel/preset-typescript を入れていない。
  3. tsconfig の不整合: ts-jest が参照する tsconfigjsxesModuleInterop が実際のコードと合っていない。

解決策

1. ts-jest を使う(型もチェックする)

npm i -D ts-jest @types/jest
npx ts-jest config:init
// jest.config.js
module.exports = {
  preset: 'ts-jest',
  testEnvironment: 'node',
};

2. Babel を使う(高速・型検査なし)

npm i -D babel-jest @babel/preset-env @babel/preset-typescript
// babel.config.js
module.exports = {
  presets: [
    ['@babel/preset-env', { targets: { node: 'current' } }],
    '@babel/preset-typescript',
  ],
};

Babel は型注釈を落とすだけで型検査はしない。
型の担保は次のように別コマンドで行う。

npx tsc --noEmit

設定の詳細は Jest 公式の Getting Started(新しいタブで開く) の「Using TypeScript」を参照する。

この記事は役立ちましたか?