🧬 JSON→TypeScript型定義 生成

JSONを貼り付けて「変換」を押すだけで、TypeScript の型定義(interface / type)を自動生成します。配列・ネストしたオブジェクト・null を再帰的に型推論し、そのまま貼り付けて使える形で出力。処理はすべてブラウザ内で完結し、入力はどこにも送信されません。

入力とオプション

オブジェクト・配列・入れ子いずれも対応。Ctrl / ⌘ + Enter でも変換できます。

出力形式
null の扱い

TypeScript 型定義

解説

このツールは、貼り付けた JSON を JSON.parse で読み取り、その「実行時の値」から再帰的に TypeScript の型を組み立てます。文字列は string、数値は number、真偽値は boolean にそのまま対応させ、オブジェクトはネストした名前付きの型として切り出します。ネストした型の名前は、そのオブジェクトを保持する親キー名を PascalCase にして付けます(例: キー meta → 型 Meta)。型名が衝突する場合は末尾に連番を付けて一意化します。

配列は要素の型を調べてユニオンにします。全要素が同じ型なら T[]、複数種類が混ざるなら (A | B)[]、空配列は中身が判断できないため unknown[] になります。オブジェクトの配列は特別扱いで、全要素のキーの和集合をとって1つの型にまとめます。一部の要素にしか無いキーはオプション(?)として出力されるため、レスポンスの配列から代表的な型を1つ得たいときに便利です。

null は既定でユニオン(null または T | null)として表現します。オプションに切り替えると、null を型から外してキー自体をオプション(?)にできます。API のレスポンス型を書き起こす、外部データの形をとりあえず型で受ける、既存 JSON から interface の雛形を素早く用意する、といった場面を想定しています。type 形式・readonly 付与・ルート型名の変更にも対応します。識別子として使えないキー(foo-bar・数字始まり・日本語など)は自動でクォートして出力します。

注意点として、これは「値」からの推論であり、スキーマからの厳密な変換ではありません。数値はすべて number(整数・小数の区別なし)、文字列リテラルは string に一般化され、日付や列挙のような意味づけは復元できません。サンプルに現れなかったキーや値は型に反映されないため、代表性のある JSON を入力するか、生成後に手で調整することをおすすめします。処理は端末内で完結し、入力内容が送信されることはありません。

よくある質問

入力した JSON はサーバーに送られますか?

送られません。変換は JSON.parse と型推論を含めすべてブラウザ内で実行され、入力内容はどこにも送信されません。オフラインでも動作します。

ネストした型の名前はどう決まりますか?

そのオブジェクトを保持している親キー名を PascalCase に変換して名付けます。例えば {"meta":{...}} なら Meta という型が作られます。同名が重なる場合は Meta2 のように連番を付けて一意にします。

オブジェクトの配列はどう型付けされますか?

全要素のキーの和集合をとり、1つの型にまとめます。全要素に存在するキーは必須、一部にしか無いキーはオプション(?)になります。要素ごとにバラバラの型を作らず、代表的な1型として出力します。

空の配列や混在した配列はどうなりますか?

空配列は中身を判断できないため unknown[] になります。数値と文字列など複数の型が混ざる配列は (number | string)[] のようにユニオンの配列として出力します。

null はどう扱われますか?

既定ではユニオンとして扱い、null 単独なら null、他の型と一緒なら T | null になります。オプションに切り替えると、null を型から外してキー自体を ?(省略可能)にできます。値が常に null のキーは、真の型が分からない点にご注意ください。

キー名が識別子として使えない場合は?

foo-bar や数字始まり、日本語キーなど、そのままでは識別子にできないキーは自動でクォートして出力します(例: "foo-bar": string;)。TypeScript でもこの形でそのまま有効です。

数値は整数と小数を区別しますか?

区別しません。JavaScript の数値はすべて number のため、整数も小数もまとめて number になります。文字列リテラルも同様に string へ一般化され、リテラル型にはなりません。

生成された型はそのまま使えますか?

多くの場合そのまま貼り付けて使えますが、これはサンプル値からの推論です。実際には省略可能なキーや、より広い/狭い型が正しいこともあるため、生成後に必要に応じて手で調整することをおすすめします。