2019年6月2日日曜日

TypeScriptでJSON型

ふと、TypeScriptでJSON型というものを作ってみたくなりました。JSONで使われる型のみを集めたやつ。

ほら、ウェブアプリケーションを作るときに使えそうじゃないですか。え?使わない?まあそう言わずに。

JSONのおさらい


JSONで有効な型は

  • null
  • 真偽値
  • 数値
  • 文字列
  • 有効な型の配列
  • オブジェクト(値は有効な型)

です。最初の4つはまあいいとして、問題は配列とオブジェクト。
再帰的に定義しなければダメですが、果たして。

ダメだった例

まずはこんなかんじで作ってみました。
// JSON型
type json = null | boolean | number | string | jsonArray | jsonObject;

type jsonArray = json[];

interface jsonObject {
    [key: string]: json;
}
TypeScriptのPlaygroundで試してみるとわかりますが、これだとjsonjsonArrayが循環参照を起こしてしまいます。

うまくいった例

ここからいろいろ試行錯誤したんですが、過程はみんな興味ないと思うので、結果だけ紹介。
// うまくいった例
type json = null | boolean | number | string | jsonArray | jsonObject;

interface jsonArray extends Array<json> {
}

interface jsonObject {
    [key: string]: json;
}
Arrayを継承して今度はうまくいきました

この型を使っていろいろなデータでテストしてみました。いいかんじ。
みなさんもお試しあれ。

0 件のコメント:

コメントを投稿