snakify-ts
Version:
Recursive snake casing of object property names with proper typing
7 lines (6 loc) • 481 B
TypeScript
declare type CamelCase<S extends string> = S extends `${infer P1}_${infer P2}${infer P3}` ? `${Lowercase<P1>}${Uppercase<P2>}${CamelCase<P3>}` : Lowercase<S>;
declare type KeysToCamelCase<T> = {
[K in keyof T as CamelCase<string & K>]: (T[K] extends Array<infer U> ? (U extends {} ? Array<KeysToCamelCase<U>> : T[K]) : (T[K] extends {} ? KeysToCamelCase<T[K]> : T[K]));
};
export default function camelize<T>(obj: T): T extends String ? string : KeysToCamelCase<T>;
export {};