export type ToCamelCase = Uncapitalize>>; export type CamelDashes = TString extends `${ infer TPrefix }-${ infer TSuffix }` ? `${ TPrefix }${ CamelDashes> }` : TString export type CamelSpaces = TString extends `${ infer TPrefix } ${ infer TSuffix }` ? `${ TPrefix }${ CamelSpaces> }` : TString export type InferEnum> = T[keyof T]; export const Enum = (...keys: [...T]) => { const obj = {} as Record; for (const key of keys) { const modifiedKey = key.replaceAll(/-(\w)/g, (_, c: string) => c.toUpperCase()); obj[modifiedKey] = key; } return obj as {[P in T[number] as ToCamelCase

]: P}; };