TypeScriptは型安全なJSON用の型を提供していないぽい
以下のような感じで、Jsonの型が欲しくなるときがある。
code:ts
type JsonPrimitive =
boolean |
number |
string |
null;
type JsonArray = JsonPrimitive[] | JsonObject[];
type JsonObject = {
};
type Json = JsonPrimitive | JsonArray | JsonObject;
標準で提供してないか調べたら、GitHubにissueがあった。
2015年に作られて、まだopenの様子。
そのため、まだJSONの型を提供してないみたい。
JSONはanyではないはず。なぜならDateやFunctionやSymbolやPromiseや他のクラスでnewされたオブジェクトはJSONではない。JavaScriptで使えるオブジェクトすべてがJSONなわけではない。ここでのJSONはで定義されているものを意味している。 anyは型エラーを起こせないのでJSONを使うところをすべてanyにすると型システムで間違いを検出できなくなってしまうので避けたい。 恐らくそのissueでも触れているとは思うがJSON.parse()がanyを返しているのはちょっと問題なきがする。JSON.parse()がJSON以外の型を返す可能性があって止む無くanyになっているのかどうかは知らない。