JSONからTypeScriptコンバーター

JSONからTypeScriptインターフェースを自動生成

サンプルを試す
ルートインターフェース名:

JSON入力

TypeScript出力

ローカルで実行 · シークレットの貼り付けも安全
TypeScriptインターフェースがここに表示されます…

JSONからTypeScriptへの変換とは?

JSONペイロードを貼り付けると、TypeScriptインターフェースが生成されます。インターフェースは、オブジェクトが持つプロパティとその型を厳密に記述する型付きコントラクトです。インターフェースがなければ、JSON.parse()から返されるデータはanyとして扱われ、プロパティアクセスや代入に対してエディタの補助もコンパイラチェックも得られません。JSONからTypeScriptに変換することで、インターフェースを手書きすることなくその安全性を手に入れられます。

TypeScriptはJSONの6つの値型すべてに対応しています:string、number、boolean、null、object、arrayです。ネストされたJSONオブジェクトはそれぞれ独自の名前付きインターフェースになります。配列の型は最初の要素から推論されます。生成されたインターフェースはJSON.parse()が実際に返す値と一致するため、推測ではなく実データを反映した型定義が得られます。

大規模または深くネストされたJSONのインターフェースを手書きすることは手間がかかり、ミスが起きやすい作業です。JSONからTypeScriptへの生成ツールは構造を自動的に読み取り、ネストを再帰的に処理し、数秒でクリーンなインターフェースコードを出力します。これは未知のAPIを組み込む際、モックデータでプロトタイプを作成する際、またはJavaScriptのコードベースをTypeScriptへ移行する際に特に役立ちます。ネストされたプロパティ名や型を手動で管理する必要がなくなるため、型のボイラープレートではなくアプリケーションロジックに集中できます。

JSONからTypeScriptへの生成ツールを使う理由

TypeScriptインターフェースの手書きは小さなオブジェクトなら現実的ですが、ネストされた構造や大規模なAPIレスポンスが相手になるとすぐに破綻します。3階層のネストを持つ50フィールドのAPIレスポンスを手書きすると、数十ものインターフェースが生まれ、それぞれがタイポやnullableフィールドの見落としを招く可能性があります。自動生成ツールは完全なインターフェースセットをミリ秒で出力し、コードとデータの間の型不一致を大幅に減らします。精度面に加え、実際のAPIコントラクトと型定義の同期も保たれます。サービスがレスポンスの形状を変えた場合は、更新後のJSONを貼り付けて再生成するだけです。手書きのインターフェースファイル全体を見直すよりはるかに速い作業です。

即座にインターフェースを生成
JSONペイロードを貼り付けるだけで、ミリ秒以内に正しく型付けされたインターフェースが得られます。設定不要、ビルドステップも必要ありません。
🔒
データをプライベートに保つ
すべての変換はブラウザ上で実行されます。JSONがマシンの外に出ることはありません。本番データや内部APIレスポンスを扱う際に重要な点です。
📋
ネスト構造を自動処理
ネストされたオブジェクトは別々の名前付きインターフェースとして生成されます。配列・nullableフィールド・混在型もすべて手動操作なしに処理されます。
🌐
アカウント・インストール不要
モダンブラウザがあればどこでも動作します。npmパッケージのインストール、CLIツールの設定、サインアップフォームの記入は一切不要です。

JSONからTypeScriptへの変換ユースケース

フロントエンドAPIインテグレーション
RESTまたはGraphQLのJSONレスポンスを貼り付けて、ReactやAngular、Vueコンポーネント用のインターフェースを生成します。型安全なpropsとstateにより実行時の予期しないエラーを防げます。モノレポではフロントエンドとバックエンドで生成したインターフェースを共有し、双方が同じデータ形状を参照できます。
バックエンドのレスポンス型定義
サードパーティAPIを利用するNode.jsやDenoのサービスでは、生成されたインターフェースが役立ちます。コントラクトを一度定義すれば、形状の不一致をコンパイル時に検出できます。生成されたインターフェースはサービス利用者向けの軽量なドキュメントにもなり、別途スキーマファイルやWikiページを用意する必要が減ります。
DevOps設定ファイル
AWS CDKやPulumiなどのインフラツールはJSON設定を使います。その設定に対してTypeScript型を生成すれば、デプロイ前に設定値を検証できます。タイポや値の型の誤りによる設定ミスを、コードが本番環境に到達する前に検出できます。
QAテストフィクスチャ
JSONテストフィクスチャからインターフェースを生成することで、アサーションが期待するデータ形状と一致していることを確認できます。テスト実行前に欠損フィールドや名前変更されたフィールドを検出できます。
データパイプラインのコントラクト
パイプラインがJSONを出力する場合、生成されたインターフェースは下流の利用者に対するスキーマとして機能します。出力形状が変わるとコンパイル時エラーが発生します。
TypeScriptの学習
TypeScript初心者の学生や開発者は、慣れ親しんだJSON構造を貼り付けてインターフェースとデータのマッピングを確認できます。動的型付けと静的型付けのギャップを埋める学習ツールになります。

JSONからTypeScriptへの型マッピング早見表

JSONの各値はTypeScriptの型に対応します。下表は各JSONプリミティブと構造型がどのように変換されるかを示しています。このマッピングはECMA-404 JSON標準とTypeScriptの組み込み型に基づいています。

JSON型値の例TypeScript型
string"hello"string
number42, 3.14number
booleantrue, falseboolean
nullnullnull
object{"key": "value"} nested interface
array[1, 2, 3]number[] (inferred from first element)

TypeScriptのinterfaceとtype エイリアスの違い

TypeScriptにはオブジェクトの形状を記述する方法が2つあります:interface宣言とtypeエイリアスです。どちらもJSON構造の表現に使えますが、拡張方法と宣言マージの挙動が異なります。JSONからTypeScriptへの生成ツールの多くがinterfaceを出力するのは、TypeScriptにおけるオブジェクト形状の慣用的な記述方法だからです。

interface
宣言マージとextends構文をサポートします。オブジェクト形状に適しており、特に公開APIやライブラリで推奨されます。他のinterfaceによる拡張やtypeとの交差型も使用できます。
type
ユニオン型・交差型・マップ型をサポートします。計算型・判別ユニオン・プリミティブへのエイリアスが必要な場合に適しています。宣言マージのために再オープンすることはできません。

コード例

以下は各言語・ツールでJSONからTypeScriptインターフェースを生成するコード例です。各スニペットは実行可能な出力を生成します。

TypeScript
// Manual interface definition from a JSON shape
const json = '{"id": 1, "name": "Alice", "active": true}';
const parsed = JSON.parse(json);

interface User {
  id: number;
  name: string;
  active: boolean;
}

const user: User = parsed;
console.log(user.name); // "Alice" — fully typed
JavaScript (json-to-ts library)
import JsonToTS from 'json-to-ts';

const json = {
  id: 1,
  name: "Alice",
  address: { street: "123 Main St", city: "Springfield" },
  tags: ["admin", "user"]
};

const interfaces = JsonToTS(json, { rootName: "User" });
console.log(interfaces.join("\n\n"));
// interface Address {
//   street: string;
//   city: string;
// }
//
// interface User {
//   id: number;
//   name: string;
//   address: Address;
//   tags: string[];
// }
Python (datamodel-code-generator)
# Install: pip install datamodel-code-generator
# Generate TypeScript-style types from JSON using Pydantic models

# Command line:
# datamodel-codegen --input data.json --output model.py

# Or generate TypeScript directly with quicktype:
# pip install quicktype
# quicktype --lang ts --src data.json --out types.ts

import json

data = {"id": 1, "name": "Alice", "scores": [98, 85, 92]}

# Python equivalent using TypedDict (Python 3.8+)
from typing import TypedDict, List

class User(TypedDict):
    id: int
    name: str
    scores: List[int]

user: User = data  # type-checked by mypy
CLI (quicktype)
# Install quicktype globally
npm install -g quicktype

# Generate TypeScript interfaces from a JSON file
quicktype --lang ts --src data.json --out types.ts

# From a JSON string via stdin
echo '{"id": 1, "name": "Alice"}' | quicktype --lang ts

# Output:
# export interface Root {
#   id:   number;
#   name: string;
# }

よくある質問

オプションフィールドはどのように扱われますか?
JSON値がnullの場合、生成ツールはそのプロパティを?サフィックス付きのオプションプロパティとしてマークし、null型を割り当てます。欠損キーとnull値を区別する必要がある場合は、欠損プロパティにundefinedを使用するよう出力を手動で調整できます。
JSON配列もTypeScriptに変換できますか?
はい。ルートのJSONが配列の場合、生成ツールは最初の要素を検査して要素の型を推論し、その要素用のインターフェースを出力します。ルート型はそのインターフェース名に[]を付けた形になります。空の配列は検査できる要素がないためunknown[]になります。
深くネストされたJSONオブジェクトはどう処理されますか?
ネストされたオブジェクトはそれぞれ独立した名前付きインターフェースとして生成されます。名前はプロパティキーをPascalCaseに変換したものです。たとえば"shipping_address"というプロパティはShippingAddressというインターフェース名になります。これにより4〜5階層のネストがあるJSONでも出力が読みやすい状態に保たれます。複数のネストされたオブジェクトが同じ構造を共有している場合は、コードベースの重複を減らすために手動で共通インターフェースにまとめることを検討してください。
json2tsとquicktypeの違いは何ですか?
json2tsはJSON値をTypeScriptインターフェースに直接マッピングするシンプルな変換ツールです。quicktypeはさらに踏み込み、複数のJSONサンプルを分析して類似した形状を重複排除し、20以上の言語への出力をサポートしています。一度限りの変換にはブラウザベースのツールが手軽です。CIパイプラインや多言語コード生成にはquicktypeが適しています。
JSONにtypeエイリアスではなくinterfaceを使う理由は?
interfaceは宣言マージをサポートするため、元のファイルを変更せずに別ファイルで生成済みのインターフェースを拡張できます。また多くのエディタでエラーメッセージがより明確に表示されます。typeエイリアスはユニオン型やマップ型が必要な場合に適していますが、単純なJSONオブジェクト形状にはinterfaceが標準的な選択です。ライブラリやSDKを作成する場合は、利用者がソースに触れることなく宣言マージでインターフェースを拡張できるため、interfaceがほぼ常に正しい選択です。
配列内の型が混在している場合はどうなりますか?
生成ツールはnullでない最初の要素から配列の要素型を推論します。配列にオブジェクトと文字列が混在しているような場合、出力は最初の要素の形状のみを反映します。型が混在する配列の場合は、生成後に手動でユニオン配列型(例:ItemとStringの両方の要素を受け付ける型)を定義し、すべての可能な要素型を正確に表現する必要があります。
生成したインターフェースを実際のプロジェクトで使うには?
生成されたインターフェースをプロジェクトの.tsファイル(通常はtypes/またはmodels/ディレクトリ)にコピーします。JSONデータを取得・処理する箇所でインポートして使用します。実行時にAPIレスポンスがインターフェースと一致することを保証したい場合は、ZodやIo-tsなどの実行時バリデーターと組み合わせてください。Zodを使用すると、inferユーティリティを使ってスキーマから直接TypeScript型を導出でき、インターフェース定義とバリデーションロジック間の重複を排除できます。
生成されたTypeScriptインターフェースは実行時の型安全性を提供しますか?
いいえ。TypeScriptの型システムはコンパイル時に消去されます。インターフェースはエディタとビルド時にのみ存在し、実行時には存在しません。JSON.parse()は後から型を割り当てても常にanyを返します。実行時に型を強制するには、生成されたインターフェースをZodやIo-tsなどのライブラリと組み合わせてください。これらのライブラリは受け取ったオブジェクトが使用前に期待する形状と一致することを検証し、不正なAPIレスポンス・欠損フィールド・予期しないnull値から保護します。