UNPKG

snakify-ts

Version:

Recursive snake casing of object property names with proper typing

7 lines (6 loc) 481 B
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 {};