Q: Does it generate interface or type aliases?
Interfaces. They support declaration merging, render cleanly in IDE hover, and read better in error messages than aliased object types. If you prefer type for stricter union semantics or to attach generics, the converted output is easy to swap with a find-and-replace after generation.
Q: Why are all my fields required when some of them are obviously optional?
Because JSON does not distinguish between "key absent" and "key explicitly undefined." The generator only sees the keys present in your sample, so it marks every one as required. Either paste multiple samples to widen the type, or add ? to each optional key after generation.
Q: How are arrays with mixed element types handled?
Mixed primitives become a union: (string | number)[]. Arrays of objects with slightly different shapes get merged into a single interface where the differing fields are marked optional, which is usually what you want for id-or-detailed-objectpatterns. Inspect the result; if it's too loose, split the array into typed sub-arrays.
Q: My API uses snake_case. Does the converter rename keys to camelCase?
No. The interface keys mirror the JSON keys exactly, because TypeScript can index snake_case identifiers fine and renaming would force a transformation step. If you want camelCase types, run the JSON through a key-transform helper before generating, or layer a mapper at the API boundary.
Q: Does it produce readonly fields?
No, the default is mutable. If you want immutability, wrap the generated interface with TypeScript's Readonly<T> or add readonly to each property manually. For deep immutability you'll need a recursive helper.
Q: Is my JSON sent to a server?
No. Inference runs entirely in your browser. Open DevTools Network and you'll see zero outbound requests when you paste or generate. Safe for staging payloads, authenticated responses, or anything you would not upload to a third-party tool.