100% ローカル — データがブラウザの外に出ることはありません

JSONをTypeScriptに変換|型を手で書かずに済ませる

JSONのサンプルをTypeScriptのインターフェースに変換します。入れ子のオブジェクトにも名前付きの型が付くので、受け取ったデータがそのまま貼れるファイルになります。

高速 プライベート Cookieゼロ
スタイル

JSON 入力

TypeScript 出力

このツールの動作

JSON の標本が TypeScript の型になります。オブジェクト一つにつき、名前付きの型が一つです。

{ "id": 1, "name": "Ada", "address": { "city": "Paris" } }
export interface Root {
  id: number;
  name: string;
  address: Address;
}

export interface Address {
  city: string;
}

interface か type か、export を付けるか、根の名前をどうするかは、いずれも設定できます。

根の一覧に名前がついた

オブジェクトの配列は、最もよくある標本です。一覧を返す口が返すのがそれだからです。以前の出力は要素の型だけでした。

export interface UsersItem {
  id: number;
}

指定した根の名前はどこにも現れませんでした。今は一覧そのものに名前がつきます。

export type Users = UsersItem[];

export interface UsersItem {
  id: number;
}

これは欠陥でした。この文章を書く過程で見つけ、直しました。この場所の Zod と io-ts の生成器は以前から根を出していました。TypeScript は出していませんでした。

同じ名前、違う形

型の名前は鍵に由来するので、別々の枝がどちらも Address を求めることがあります。形が違うとき、二つ目は Address2 になります。混ぜれば、どちらにも合わない型ができるからです。形が同じときは定義を一つ共有します。二度参照される一つの Address です。

標本ひとつでは言えないこと

省略可能の印はどこにも付きません。これは意図したことです。一度見えた鍵は、現れうることを示すだけで、いつも現れることは示しません。"nickname": null は nickname: null になります。標本が持つのはそれだけだからです。分かった時点で、ご自身で string | null に広げてください。

二十桁の識別子は number と型付けされますが、JavaScript の数値はそれを保持できません。2^53 を超えると、解析の時点で値が変わります。型は標本について嘘をついているのではなく、言語の限界を引き継いでいます。その項目が雪片式の識別子なら、string にして JSON.parse から遠ざけてください。

重複した鍵は拒む

{"a": 1, "a": "x"} は以前 a: string を返していました。最後の出現が黙って勝っていたのです。値が二つ、鍵は一つ、その項目がどの型なのかを言う手立てはありません。変換は今は止まり、この文書は曖昧だと告げます。同じ文書に対して、ここの JSON 検証器がすでに返していた答えと同じです。

プライバシー

すべての処理はブラウザ内のJavaScriptだけで完結します。データがアップロードされることはないため、機密情報でも安心して利用でき、オフラインでも動作します。

よくある質問

なぜどの項目も省略可能になっていないのですか。
文書ひとつではそれが分からないからです。鍵があることは、その鍵がありうることを示すだけで、いつもあることは示しません。すべてを必須とするのは、二つ目の標本で確かめられる主張です。`?` を付け足せば、見せてもいないデータについて主張することになります。
利用者の一覧から `UsersItem` しか出ません。一覧の型はどこですか。
今はあります。根が配列のとき、以前は要素の型だけを出し、`UsersItem[]` は自分で書くことになり、指定した根の名前は黙って捨てられていました。今は `export type Users = UsersItem[];` から始まります。この文章を書く過程で見つけた、本物の欠陥でした。
異なる二つのオブジェクトがどちらも `Address` になります。どうなりますか。
二つ目が `Address2` になります。名前は鍵に由来し、別の枝にある二つの鍵が、形は違うのに同じ名前を持つことがあります。混ぜればどちらにも合わない型になります。番号を付ければどちらも正しいままで、形が同じなら今までどおり一つの定義を分け合います。

関連ツール