4 ms·
The TS devs have mentioned that they wish JSON.parse returned unknown, but the change is too disruptive now.
by madeofpalk 3y ago
The TS devs have mentioned that they wish JSON.parse returned unknown, but the change is too disruptive now.
- iainmerrick 3y agoIt would be a lot nicer if it instead returned some JsonType that’s a union of all the possible JSON values. Anyone know if there’s a good reason why it doesn’t do that?
- striking 3y agoYou can pass an arbitrary rehydration function, which can return non-JSON-representable types
- Dylan16807 3y agoIt could look at the return type of your reviver function, or at least whether you passed one in.
- kristiandupont 3y agoThere's a big discussion about this: https://github.com/microsoft/TypeScript/issues/1897 https://github.com/microsoft/TypeScript/issues/1897. The benefit seems extremely limited to me. Valid JSON is obviously a subset of `any`, but I can't think of a situation where that particular specificity provides any value. Can you?
- iainmerrick 3y agoThe value is when you’re parsing the JSON afterwards. It’s good to know you can match it exhaustively -- each value is either a Record<string, Json>, Json[], string, number, Boolean or null, and nothing else. Edit to add: I think “any” is almost always a big cop-out because you couldn’t be bothered figuring out the correct type, and it often causes problems (loss of type coverage) further down the line. I admit I do use “any” in my own code when I really need to, but a library should work harder to avoid it, and the standard platform typings should work harder still.
- rcfox 3y agoWhat are the common operations you can perform on that union?
- consilient 3y agoYou can narrow it exhaustively.
- madeofpalk 3y agoThat's effectively what unknown would be - at least the outcome would mostly be the same. You'll end up narrowing values in just the same way.