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
お使いの版で挙動が違う場合があります。誤りに気づいたらこの解説を報告するから教えてください。