機能
JSON → TypeScript 変換ツールは、API レスポンスや設定ファイルなどの JSON サンプルを読み取り、それを表す TypeScript のインターフェースを書き出します。フィールドを 1 つずつ手で書く代わりに、実際のレスポンスを 1 つ貼り付ければ、fetch の結果や Redux の状態、テストデータにそのまま使える型が得られます。
生成器は最初の値だけでなく、すべての値を調べます。数値は number、テキストは string になり、入れ子のオブジェクトには専用のインターフェースが作られます。配列の要素はまとめられるため、一部の要素にしかないフィールドは省略可能に、時々 null になるフィールドは null 許容として型付けされます。
使い方
- JSON を入力欄に貼り付けるか、
.jsonファイルをアップロードするか、サンプル をクリックします。 - ルート型の名前を設定し、スタイルを選びます。
interfaceかtype、null を| nullにするか省略可能にするか、readonlyプロパティ、各宣言にexportを付けるかどうかです。 - TypeScript をコピーするか、
.tsファイルとしてダウンロードします。
不正な JSON は問題のある行と列とともに表示されるので、すぐにサンプルを直せます。
例
この JSON は:
{ "id": 7, "name": "Ada", "tags": ["admin"], "manager": { "id": 1, "email": null } }
次の宣言になります:
export interface Root {
id: number;
name: string;
tags: string[];
manager: Manager;
}
export interface Manager {
id: number;
email: null;
}
ヒント
- 1 つのサンプルからは、そこに含まれる内容しかわかりません。文字列にも null にもなるフィールドなら両方の例を含めるか、複数のサンプルを配列にまとめてマージさせましょう。
- first-name のように識別子として使えないフィールド名は引用符で囲まれるので、出力は必ずコンパイルできます。
- 結果は出発点です。サンプル以上のことがわかっているなら、文字列フィールドをリテラルのユニオン型や
Dateに絞り込んでください。 - Go が必要ですか?JSON → Go 変換は同じ推論を使って json タグ付きの構造体を書き出します。
よくある質問
› 入れ子のオブジェクトはどう扱われますか?
入れ子のオブジェクトはそれぞれ独立した名前付きインターフェースになり、名前はキーを PascalCase にしたものです。address フィールドなら Address インターフェースになります。構造がまったく同じオブジェクトは 1 つのインターフェースを共有し、名前が重なると Address2 のように番号が付きます。
› 配列の型はどう決まりますか?
配列の全要素が 1 つの要素型にまとめられます。オブジェクトの配列はキーの単数形を名前にしたインターフェースの配列になり、orders なら Order[] です。種類が混在する配列は (string | number)[] のようなユニオンに、空の配列は unknown[] になります。
› フィールドが省略可能になるのはいつですか?
配列内の一部のオブジェクトにそのフィールドがないときです。どのオブジェクトにもあるが時々 null になるフィールドは、既定で T | null と書かれます。null の値を省略可能に切り替えると、null を外してフィールド名に疑問符を付けた省略可能なフィールドになります。
› interface と type のどちらを選ぶべきですか?
どちらも同じオブジェクトの形を表せます。interface は拡張やマージができ、多くのスタイルガイドがオブジェクト型に推奨しています。type エイリアスは、結果をユニオン型やマップ型と組み合わせる予定があるときに便利です。コードベースの慣習に合わせて選んでください。
› JSON はサーバーに送信されますか?
いいえ。型の推論はブラウザ内で行われるので、実際の API レスポンスを貼り付けても安全です。