JSON, turned into types — legibly.
Paste an API response. Get typed interfaces that read like they were written by a person who cared. Inference is conservative by default, opinionated when asked.
/** Inferred from a sample of 1 response. */ export interface Customer { id: string; object: "customer"; // literal balance: number; created: number; email: string; livemode: boolean; metadata: { order_id: string; }; address: string | null; // nullable }
A type is an argument about what your data is.
Most JSON-to-types tools give you a wall of any disguised
as structure. You paste a payload, you get back something
syntactically valid and semantically empty — everything a
string, every object Record<string, unknown>.
It compiles. It tells you nothing.
This converter takes the opposite position. When a field named
object contains the literal "customer", we
infer the literal type — because Stripe’s response will
always say that. When address is null in one sample but
the field is present, we infer nullable, not
optional. These are small arguments, stated inline as
comments, reviewable at a glance.
“A type should read like a well-typeset sentence — every token doing load-bearing work, no decorative generics, no defensive unknowns.”
— the house styleThe converter supports TypeScript (interface or type alias), Zod, Go struct tags, and Rust serde. The same sample yields consistent shapes across targets — naming, nullability, and narrowing decisions carry through.