snakify-ts
Version:
Recursive snake casing of object property names with proper typing
10 lines (9 loc) • 539 B
TypeScript
/**
* @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 {};