JSON から TypeScript の型定義を生成

貼り付けたJSONを解析し、ネストしたオブジェクトをinterfaceまたはtype別名に分解して出力します。配列内で欠けているキーはオプショナル(?)に、複数の型が混在する値はユニオン型に自動変換。readonlyやセミコロンの有無も選べます。

ネストしたオブジェクトはキー名をPascalCase化した名前でinterface(またはtype)に分解されます。配列の要素はキー名を単数形化した名前を使います(例: items → Item)。配列内の一部の要素にしか無いキーは自動的にオプショナル(?)になり、同じキーに複数の型が混在する場合はユニオン型(A | B)にします。

使い方

  1. 上の欄にJSONを貼り付けます(入力と同時に型定義を生成します)。
  2. 「ルート型の名前」で最上位の型名を指定します。
  3. 「出力形式」でinterfaceかtype(type alias)かを選びます。
  4. 必要に応じて「readonly」「セミコロン」を切り替えます。生成結果は「型定義をコピー」でコピーできます。

仕組み・計算式

ネストしたオブジェクトは、そのキー名をPascalCase化した名前のinterface(またはtype)として再帰的に分解します。配列はTypeScript Handbookが定めるArray記法(T[]、型が混ざる場合はユニオン型(A | B)[])で表現します。配列内のオブジェクト要素は全要素のキーの和集合を取り、一部の要素にしか無いキーはオプショナルプロパティ(?)にします。同じキーで値の型が複数種類混在する場合はユニオン型(string | number)にし、値がnullの場合はnullを型に含めます。これはTypeScript HandbookのUnion Types・Optional Propertiesに沿った変換です。配列要素の型名はプロパティ名末尾の簡易な単数形化(items→Item、categories→Category)で決めており、厳密な英語文法ではなく規則的なヒューリスティックです。

現場の落とし穴: JSONの数値はすべてnumber型になりますが、実APIでは同じキーでも整数専用・小数許容など意味が異なる場合があります。生成結果を確定させず、必要ならUnion Literal型("A" | "B")などへ手を加えてください。また空配列[]は要素の型情報を持たないためunknown[]になるので、サンプルJSONに実データを含めるほど精度が上がります。

よくある質問

Q. キーが有効な識別子でない場合(ハイフンを含む等)はどうなりますか?

A. "user-id"のようにダブルクォートで囲んだ文字列キーとして出力します。TypeScriptのプロパティ名は識別子でなくても文字列リテラルとして宣言できるため、そのまま有効な型定義になります。

Q. interfaceとtypeはどちらを選ぶべきですか?

A. どちらも同じ形の型を表現できますが、後からextendsで拡張したい場合はinterfaceが、ユニオン型など柔軟な合成をしたい場合はtypeが向いています。

Q. JSONにエラーがあるとどうなりますか?

A. JSON.parseが投げる構文エラーの位置情報を行番号・列番号に変換して表示します。カンマの過不足や引用符の閉じ忘れがないか確認してください。

関連ツール

最終更新・根拠の確認日: 2026-09-10 · カテゴリ: 開発・データ