JSON → TypeScript 変換ツール

JSONを貼り付けるだけで、ネストしたすべてのオブジェクトに対応するTypeScriptのinterfaceを生成し、そのままプロジェクトで使えます。

JSONからTypeScriptのinterfaceを生成

APIレスポンスの型を手で書くのは時間がかかり、ミスも起きやすい作業です。このツールはJSONサンプルを読み取り、オブジェクトの形ごとにexportされたinterfaceを1つずつ生成します。ネストしたオブジェクトはそれぞれ名前付きのinterfaceになり、配列はstring[]のような型付き配列に、数値・文字列・真偽値はnumber、string、booleanにマッピングされます。出力されるのは型宣言だけで実行時のコードを含まないため、バンドルサイズは一切増えません。

使い方

  1. 連携するAPIの実際のレスポンスを貼り付けます。たとえばブラウザのネットワークタブからコピーできます。
  2. 型名には、UserやApiResponseなど、ルートオブジェクトが表すものを指定します。
  3. 生成されたinterfaceをtypes.tsファイルにコピーし、const user: User = await res.json() のようにfetchの結果に型注釈を付けます。

よくある質問

生成されるのはinterfaceですか、それともtypeエイリアスですか?
exportされたinterfaceを生成します。APIデータの型付けにおいてはオブジェクト型のtypeエイリアスと同じように使えるので、コピー後に自由に名前を変えたり書き換えたりできます。
オプショナルなプロパティ(field?: string)にするにはどうすればよいですか?
生成ツールはサンプルに含まれる情報しか把握できません。配列に複数のオブジェクトを入れ、その一部でフィールドを省略しておくと、そのプロパティはオプショナルとして生成されます。サンプル内で常にnullのフィールドはnull型になるため、型がわかっている場合は実際の値を入れてください。
interfaceは実行時にデータを検証しますか?
いいえ。TypeScriptの型はコンパイル時に消えるため、不正なレスポンスを受け取ってもエラーにはなりません。実行時のチェックが必要な場合は、JSON SchemaツールでJSON Schemaを生成して検証するか、バリデーションライブラリを使用してください。

例: JSONからTypeScriptへの変換

入力JSON

{
  "id": 42,
  "name": "Ada Lovelace",
  "email": "ada@example.com",
  "roles": ["admin", "editor"],
  "profile": { "bio": "Mathematician", "website": "https://example.com" }
}

生成されたTypeScript(User)

export interface User {
    id:      number;
    name:    string;
    email:   string;
    roles:   string[];
    profile: Profile;
}

export interface Profile {
    bio:     string;
    website: string;
}

JSONを他の言語に変換