UNPKG

snakify-ts

Version:

Recursive snake casing of object property names with proper typing

10 lines (9 loc) 539 B
/** * @see https://newbedev.com/typescript-convert-generic-object-from-snake-to-camel-case */ declare type SnakeCase<S extends string> = S extends `${infer T}${infer U}` ? `${T extends Capitalize<T> ? "_" : ""}${Lowercase<T>}${SnakeCase<U>}` : S; export declare type Snakify<T> = { [K in keyof T as SnakeCase<string & K>]: T[K] extends Array<infer U> ? U extends {} ? Array<Snakify<U>> : T[K] : T[K] extends {} ? Snakify<T[K]> : T[K]; }; export default function snakify<T>(obj: T): T extends String ? string : Snakify<T>; export {};