JSON → TypeScript
サンプルのペイロードを TypeScript の型定義に変換します。入れ子のオブジェクトは独自の型になり、混在した配列はユニオンになり、一部の行にしかないキーは省略可能として出力されます。
JSON
TypeScript
このツールについて
API のレスポンスを手で型付けするのは面倒で、しかも微妙に間違えやすい作業です。実際のペイロードを 1 つ貼り付ければ、その型定義が生成されます。入れ子のオブジェクトはそれぞれ名前付きの型になり、オブジェクトの配列は 1 つの形にまとめられるため、一部の行にないキーは省略可能として印が付き、混在した配列はユニオンになります。同じ形は一度だけ出力され、共有されます。できないのはサンプルを超えて推測することです。例の中で null だった項目は null として型付けされます。データがそれ以外を語っていないからです。
使い方
- 1代表的な JSON レスポンスを貼り付けます。配列の行数が多いほど、省略可能かどうかの判定が正確になります。
- 2ルート型に名前を付け、コードベースに合わせて interface か type を選びます。
- 3結果を .d.ts ファイルにコピーし、サンプルでは狭すぎた項目を手で広げます。
よくある質問
›省略可能な項目はどう判定されますか?
配列内のオブジェクトを突き合わせて判定します。一部の要素にあって他にないキーは省略可能と印が付き、すべてに存在するキーは必須になります。オブジェクトが 1 つだけではどちらの根拠も得られないため、すべてのキーが必須として出力されます。
›なぜ string | null ではなく null と型付けされるのですか?
サンプルが示したのが null だけだったからです。推論は与えられたデータしか記述できません。そうした項目は手で広げるか、値の入った例を含むサンプルを貼り付けてください。
›異なる 2 つのキーが 1 つの interface を共有しているのはなぜですか?
同一の形は一度だけ出力して再利用するためです。出力が短く保たれます。今はたまたま同じ形に見えるだけで概念的には別の型なら、interface の名前を変えてください。
›interface と type のどちらを選ぶべきですか?
interface は拡張や宣言のマージができ、オブジェクトの形や公開 API に向いています。type エイリアスはユニオンやマップ型もカバーします。生成されるペイロードの形としては両者の挙動は同じなので、コードベースで既に使っているほうを選んでください。
›実行時にデータを検証してくれますか?
いいえ。TypeScript の型はコンパイル時に消えるため、API のレスポンスが実際に一致しているかは誰も検証しません。実行時の保証が必要なら、代わりに Zod や Valibot でスキーマを生成し、そこから型を導出してください。