{ }JSONKit.tools

JSON → TypeScript

サンプルのペイロードを TypeScript の型定義に変換します。入れ子のオブジェクトは独自の型になり、混在した配列はユニオンになり、一部の行にしかないキーは省略可能として出力されます。

JSON

TypeScript

入力を待っています…

このツールについて

API のレスポンスを手で型付けするのは面倒で、しかも微妙に間違えやすい作業です。実際のペイロードを 1 つ貼り付ければ、その型定義が生成されます。入れ子のオブジェクトはそれぞれ名前付きの型になり、オブジェクトの配列は 1 つの形にまとめられるため、一部の行にないキーは省略可能として印が付き、混在した配列はユニオンになります。同じ形は一度だけ出力され、共有されます。できないのはサンプルを超えて推測することです。例の中で null だった項目は null として型付けされます。データがそれ以外を語っていないからです。

使い方

  1. 1代表的な JSON レスポンスを貼り付けます。配列の行数が多いほど、省略可能かどうかの判定が正確になります。
  2. 2ルート型に名前を付け、コードベースに合わせて interface か type を選びます。
  3. 3結果を .d.ts ファイルにコピーし、サンプルでは狭すぎた項目を手で広げます。

よくある質問

›省略可能な項目はどう判定されますか?

配列内のオブジェクトを突き合わせて判定します。一部の要素にあって他にないキーは省略可能と印が付き、すべてに存在するキーは必須になります。オブジェクトが 1 つだけではどちらの根拠も得られないため、すべてのキーが必須として出力されます。

›なぜ string | null ではなく null と型付けされるのですか?

サンプルが示したのが null だけだったからです。推論は与えられたデータしか記述できません。そうした項目は手で広げるか、値の入った例を含むサンプルを貼り付けてください。

›異なる 2 つのキーが 1 つの interface を共有しているのはなぜですか?

同一の形は一度だけ出力して再利用するためです。出力が短く保たれます。今はたまたま同じ形に見えるだけで概念的には別の型なら、interface の名前を変えてください。

›interface と type のどちらを選ぶべきですか?

interface は拡張や宣言のマージができ、オブジェクトの形や公開 API に向いています。type エイリアスはユニオンやマップ型もカバーします。生成されるペイロードの形としては両者の挙動は同じなので、コードベースで既に使っているほうを選んでください。

›実行時にデータを検証してくれますか?

いいえ。TypeScript の型はコンパイル時に消えるため、API のレスポンスが実際に一致しているかは誰も検証しません。実行時の保証が必要なら、代わりに Zod や Valibot でスキーマを生成し、そこから型を導出してください。