type Expand = T extends infer O ? { [K in keyof O]: O[K] } : never;
Force TypeScript to fully expand a type. This helps with deferred type evaluation in recursive types.