Paste a JSON payload and get a TypeScript interface, with optional fields worked out from the records that disagree.
The result appears hereFrom an array of objects. A key present in some elements and missing from others comes out optional; a key present in all of them does not. One lone object cannot tell you that, so everything in it is required.
Because the shape stays readable and you can see the whole payload at once. Pull a nested object out into its own interface when you need to name it, which is a decision about your code rather than about the sample.
A field that is null in every sample is typed null, since one sample cannot say what else it holds. A field that is null in some records and a value in others becomes that type unioned with null.