🏷️
TypeScript型システム — コンパイル後全て消える
構造的型付け(Structural Typing)とは何か、Javaの名目的型付けとなぜ違うか
Java:名前の違うCatとDogは互換不可。TypeScript:プロパティとメソッドの構造が同じなら互換。
コンパイル後何が残るか
: stringが全消滅。TypeScriptコンパイラは型チェック後に全型情報を消去(type erasure)。ランタイムでtypeofでTypeScript型を確認できない理由。
問題になる場合
TypeScript型はランタイムに存在しないためAPIレスポンス検証不可。Zod等のランタイム検証ライブラリが必要。
型絞り込み(Type Narrowing)
ランタイムで型確認するにはJavaScriptの方法を使う:typeof、in、instanceof。TypeScriptコンパイラがこれらのパターンを認識し分岐内で型を絞る。
キーポイント
1
TypeScript型はコンパイル時にのみ存在 — ランタイムJSに痕跡なし(type erasure)
2
構造的型付け — 「名前」ではなく「構造」で互換性判断
3
APIレスポンス等のランタイム検証はZod/Valibot等の別ライブラリが必要
4
typeof/in/instanceofパターンでType Narrowing可能
ユースケース
APIレスポンス検証 — Zod + TypeScriptでコンパイル時+ランタイム両方カバー
ライブラリ型定義 — .d.tsファイルが別途必要な理由の理解