JSON から TypeScript へ: 手書き interface をやめる
2024-08-04
手書きインターフェースは実際の API レスポンスとずれやすくなります。サンプル JSON から型を生成する方法は定番ですが、推論の前提と限界を理解することが重要です。
なぜ型生成するのか
コンパイル時にタイポや null アクセスを検出でき、OpenAPI がない/古い場合でも実データから型を定義できます。
手動マッピング例
{ "id": 1, "name": "Alice", "email": null }interface User {
id: number;
name: string;
email: string | null;
}ネスト配列とユニオン
空配列は要素型を手動指定する必要があり、異種配列はユニオン型になります。
optional と null の違い
キー欠落(email?)と null 値(email: string | null)は別の意味です。バックエンドの仕様に合わせて定義しましょう。
ツール
quicktype CLI、json-schema-to-typescript、単発用途ならオンライン json2ts が便利です。
# npx quicktype sample.json -o types.ts --lang typescriptベストプラクティス
生成ファイルは手編集より再生成を基本にし、複数サンプルで型精度を上げ、API 変更は tsc で早期検知します。