🏷️

TypeScript型システム — コンパイル後全て消える

構造的型付け(Structural Typing)とは何か、Javaの名目的型付けとなぜ違うか

Java:名前の違うCatDogは互換不可。TypeScript:プロパティとメソッドの構造が同じなら互換。

コンパイル後何が残るか

: stringが全消滅。TypeScriptコンパイラは型チェック後に全型情報を消去(type erasure)。ランタイムでtypeofでTypeScript型を確認できない理由。

問題になる場合

TypeScript型はランタイムに存在しないためAPIレスポンス検証不可。Zod等のランタイム検証ライブラリが必要。

型絞り込み(Type Narrowing)

ランタイムで型確認するにはJavaScriptの方法を使う:typeofininstanceof。TypeScriptコンパイラがこれらのパターンを認識し分岐内で型を絞る。

キーポイント

1

TypeScript型はコンパイル時にのみ存在 — ランタイムJSに痕跡なし(type erasure)

2

構造的型付け — 「名前」ではなく「構造」で互換性判断

3

APIレスポンス等のランタイム検証はZod/Valibot等の別ライブラリが必要

4

typeof/in/instanceofパターンでType Narrowing可能

ユースケース

APIレスポンス検証 — Zod + TypeScriptでコンパイル時+ランタイム両方カバー ライブラリ型定義 — .d.tsファイルが別途必要な理由の理解