export type MaybePromise = T | PromiseLike; export type MaybeArray = T | T[]; export type KeysOfType = { [K in keyof T]: T[K] extends U ? K : never; }[keyof T]; export type ObjOfType = Extract>; export type StringKeys = Extract; export type CapitalizeFirst = S extends `${infer F}${infer R}` ? `${Uppercase}${R}` : S; export type CamelJoin = `${Prefix}${CapitalizeFirst}`; export type PrefixedPick = { [P in keyof T as P extends K ? CamelJoin : never]: T[P]; }; export type RequireAtLeastOne = Pick> & { [K in Keys]-?: Required> & Partial>>; }[Keys];