IT-Q

tsconfig の paths で @/ を src に割り当てたら、型チェックは通るのに、tsc で出力した JavaScript を実行すると import が見つからず落ちました。なぜですか。

paths は TypeScript の型の解決だけを変え、出力される import の書き方は変えないからです。実行環境やバンドラにも同じ別名を設定するか、package.json の imports を使います。

面接官が見ているのはpaths が出力を書き換えないことを知っているか。

よくある答えと、面談でどう見られるか

  • paths は TypeScript の型の解決だけを変え、出力の import は書き換えない。実行環境やバンドラにも同じ割り当てが要る
    その通りです。公式も「paths は出力に影響しない」と明記しています。
  • paths の書き方が間違っている
    型チェックが通っているなら、TypeScript 側の設定は合っています。実行時に解決されないのが原因です。
  • tsc が paths を書き換えるはずなので、TypeScript のバグ
    バグではありません。tsc は import の書き方を変えない作りです。
  • Node.js が TypeScript の設定を読まないから、tsconfig を JSON から JS に変える
    形式の問題ではありません。実行時の解決は Node.js やバンドラの仕事で、別に設定が要ります。

模範解答

paths は、TypeScript が import をどこに解決するかを変えるだけで、出力される JavaScript の import の書き方は変えません。公式のモジュールの解説も「paths は出力に影響しない」とはっきり書いています。

そのため、出力された JavaScript には import "@/lib/x" がそのまま残り、実行した Node.js は @/ が何か分からずに落ちます。

バンドラを使うアプリなら、バンドラ側にも同じ別名を設定します。Node.js でそのまま動かすなら、package.json の "imports"(# で始まる別名)を使う方が、TypeScript と実行環境の両方が同じ設定を読むので確実です。公式もこれを代わりに挙げています。

対象: TypeScript 5.x〜7.0 照合した一次資料: 公式ドキュメント 照合: 2026-10-25 最終更新: 2026-10-25
お使いの版で挙動が違う場合があります。誤りに気づいたらこの解説を報告するから教えてください。

ここからどう深掘りされるか

この問いに答えられた場合、面談は次の質問に進みます。