IT-Q

API から受け取った JSON に type User を付けました。実行時に中身が User の形であることは保証されますか。

保証されません。型は実行時に消えるので、API が想定と違う形を返しても何も起きません。await した res.json() の値は any です。確かめたいなら実行時に検査するコードが要ります。

面接官が見ているのは型は実行時に消えることを理解しているか。

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

  • 保証されない。型は実行時に消えるので、確かめたいなら実行時に検査するコードが要る
    その通りです。外から来るデータは、型を付けた時点ではただの思い込みです。
  • 保証される。合わなければ TypeScript が実行時にエラーにする
    TypeScript は実行時に何もしません。型の情報はコンパイル後に消えています。
  • strict を有効にしていれば保証される
    strict もコンパイル時の検査です。実行時の値は確かめません。
  • fetch の戻り値には自動で型が付くので保証される
    await した res.json() の値は any(標準の型定義)なので、何でも代入できてしまいます。

模範解答

保証されません。型はコンパイル時の検査のためのもので、実行時には消えています。API が想定と違う形を返しても、TypeScript は何も言いません。res.json() の戻り値は標準の型定義で Promise<any> で、await した値は any なので、どんな型の変数にも代入できてしまいます。

外から来るデータ(API の応答、フォームの入力、localStorage など)を本当に信用したいなら、実行時に形を検査するコードを書きます。手で書くか、検査用のライブラリを使います。

面談では「型を付けたから安全」と言うと、型の役割を誤解していると見られます。型は「コードの中での約束」で、外との境界では確かめる必要があります。

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