Programming Field

[TypeScript] TS 4.1 の機能で型のみでJSONパーサーを書いてみたが…

スポンサーリンク

「TS 4.1 の機能で雑に型の足し算・引き算を作る」と同様に、2020年11月リリースの TypeScript 4.1 にある「テンプレートリテラル型」(Template literal types)を用いて、自分なりに型だけでJSONパーサーを書いてみましたが、その感想をここに記してみます。

はじめに

JSONは JSON.org に仕様が公開されていますが、構文としては比較的シンプルなものになっています。

この記事を書いた時点で、既に 「jamiebuilds/json-parser-in-typescript-very-bad-idea-please-dont-use」(GitHub) のように型だけでJSONパーサーを書かれているものが存在していますが、自分でもどこまでできるか書いてみたという感じになります。

※ なお、上記で紹介したリポジトリでは数値(number)の解析には対応できていませんが、以下のソースコードでは一応対応しています。

ソースコード

※ Playgroundへのリンク → TS Playground (4.1.0-dev.20201015)
※ 以下に gist.github.com にアップロードしたソースコードを埋め込んでいます。表示されない場合はこちら → https://gist.github.com/jet2jet/e51069feb975da2f19eb66d8aee50464

メイン

サンプル1 (JSON.parse)

サンプル2 (JSON Schema を解釈)

結果など

※ いずれも 4.1.0-dev.20201015 時点での確認です。

「制限などについて」に書いたように再帰制限に引っかかりやすいため、小さめの文字列リテラルであれば期待通りの結果が得られそうですが、現実的な実用性はあまりないと感じます。このことから、テンプレートリテラル型は(元のPull Requestにあるような)部分的な文字列の解析には適している一方、大きな文字列を解析するには現時点では適していないと思われます(再帰制限が緩和されたとしてもコンパイラーに大きな負荷がかかりそうに感じます)。

その他・ライセンス

更新履歴