IT-Q

verbatimModuleSyntax が有効なとき、import type { A } from "a" と import { type A } from "a" は、出力が違いますか。

verbatimModuleSyntax のもとで、import type は文ごと消えますが、import { type A } は import {} from "a" が残り、モジュールの読み込みと副作用は起きます。

面接官が見ているのはインラインの type 修飾子では import 文そのものが残ることを知っているか。

これは「Node.js で型を取り除いて直接動かしたら、import { User } from "./types.ts" の行で「User という export が無い」と落ちました。User は interface です。どう直しますか。」への追撃質問です。

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

  • 違う。前者は文ごと消えるが、後者は import {} from "a" が残り、モジュールの読み込み(副作用)は起きる
    その通りです。公式の tsconfig リファレンスがこの書き換えを例示しています。
  • どちらも文ごと消えるので、同じ
    後者は import {} from "a" が残り、モジュールが読み込まれます。
  • 後者は書けない。type は文の先頭にしか付けられない
    書けます。import { b, type c } のように、値と型を混ぜて取り込めます。
  • 前者は型チェックだけ、後者は実行時に型を確かめる
    どちらも実行時に型を確かめることはありません。違うのは import 文が残るかどうかです。

模範解答

違います。verbatimModuleSyntax が有効なとき、

  import type { A } from "a"     → 文ごと消える
  import { type A } from "a"     → import {} from "a" が残る

公式の tsconfig リファレンスが、この書き換えを例として載せています。

後者では、何も取り込まないものの、モジュール "a" は読み込まれ、その中の処理(副作用)が走ります。型だけが欲しいなら import type を使い、値と型を一緒に取り込むときは import { b, type c } のように混ぜて書きます。

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