How types are inferred
- Each nested object becomes its own
export interface, named after its key in PascalCase (tickets→Ticket). - All items of an array of objects are merged: a key present in only some items becomes optional (
express?: boolean). - Mixed values become unions (
string | null); empty arrays becomeunknown[]. - Identical shapes reuse one interface instead of duplicating it.
Types come from one sample, so they describe what you pasted, not every response the API can send. Paste a response with as many fields filled in as possible, and widen null fields by hand.