本文へスキップ

JSONからTypeScript型

JSON to TypeScript

JSONの実例からTypeScriptのインターフェースや型を推論し、省略可能なフィールドとユニオンをまとめます。

JSONのレスポンスを貼り付けると、それに合ったTypeScriptのインターフェースが出ます。先頭の1件だけを見るのではなく、標本のすべてのレコードを合わせて推論するため、一部にしかないフィールドは必須ではなく省略可能として出ます。コンパイルが通るだけの型と、実際に正しい型の違いはそこで分かれます。

🔒 ブラウザの中だけで動きますtypescriptjsoncodegentypes
出力する形式

サンプルJSON

.json ファイルを置く

このタブの中で読みます。アップロードはしません。

手元にある要素を全部入れてください。レコードが一つ増えるたびに推論が絞り込まれます。どれか一つに無いフィールドこそが、省略可能である根拠です。

TypeScript

使い方

  1. 手元にあるレコードをできるだけ多く貼り付けます

    配列は先頭の要素だけでなく、すべての要素を読んで合わせます。レコードが3件あれば1件のときよりはるかに多くのことが分かります。どれか1件に欠けているという事実こそが、そのフィールドを省略可能にする根拠だからです。

  2. ルートの型に名前を付けます

    入れ子のオブジェクトは、それを保持しているキーの名前を取ります。配列なら単数形になるので、`users`からは`User`ができます。自分で名前を決める必要があるのはルートだけです。

  3. 出力の下にある件数を読みます

    型の数、省略可能なフィールドの数、ユニオンの数、そして合わせたレコードの数が出ます。ユニオンが0より大きければ、あるフィールドが標本の中で違う種類の値を持っていたということなので、結果をコードベースに貼り付ける前に一度見ておく価値があります。

  4. インターフェースをコピーします

    出力は宣言順に並んだexport済みのインターフェースの束です。`.d.ts`に入れるか、そのレスポンスを受け取るfetchの隣にそのまま貼り付けられます。

よくある質問

これは検証ツールですか

違います。TypeScriptの型はビルド時に消えるので、ここで出たものは実行時に何も検査しません。サーバーが形を変えれば、型と食い違う値がそのまま入ってきます。実際に検査させたいなら、同じ画面でZodを出力し、それでパースしてください。

日付なのに`string`と出るのはなぜですか

JSONの上では文字列だからです。推論は構造だけを見ます。値が何であるかを報告するだけで、ISO 8601に見える文字列を`Date`にすべきだとは推測しません。その絞り込みは標本ではなく、コードベースについての決定です。

あるフィールドが文字列だったり数値だったりする場合はどうなりますか

`string | number`のようなユニオンになり、下のユニオンの数が増えます。多くの場合これは型の話ではなくAPI側の合図です。種類が変わるフィールドは、どこか下流で表に出るバグです。

標本からリテラル型は作られますか

作られません。3件のレコードで`status`がすべて`"active"`でも、出てくるのは`string`です。レコード3件は列挙型の根拠になりませんし、根拠の薄いリテラル型は1週間後にビルドを壊す種類のものです。

ここから渡せます

次の一手

このツールが出したものをそのまま受け取れる道具です。