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 が定番。
よくある原因
- トランスフォーマ未設定:
preset: 'ts-jest'も Babel の TypeScript preset も無い。 - Babel に TypeScript preset が無い:
@babel/preset-typescriptを入れていない。 - tsconfig の不整合: ts-jest が参照する
tsconfigのjsxやesModuleInteropが実際のコードと合っていない。
解決策
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」を参照する。