type CapitalizeFirstLetter = T extends `${infer First}${infer Rest}` ? `${Uppercase}${Rest}` : T; type ApplyPrefix = Prefix extends '' ? Key : `${Prefix}${CapitalizeFirstLetter}`; export type FlattenObject, Prefix extends string = '', Key = keyof T> = Key extends string ? T[Key] extends Record ? FlattenObject> : { [P in ApplyPrefix]: T[Key]; } : never; export type UnionToIntersection = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never; export {};