Skip to content

Instantly share code, notes, and snippets.

@dennisja
Created April 27, 2023 17:47
Show Gist options
  • Select an option

  • Save dennisja/cbf2740937f9cada1e96eb26f7dc4f03 to your computer and use it in GitHub Desktop.

Select an option

Save dennisja/cbf2740937f9cada1e96eb26f7dc4f03 to your computer and use it in GitHub Desktop.
A typescript generic that converts object keys from snake to camelCase
type SnakeToCamelCase<
SnakeCaseWord extends string,
Result extends string = ''
> = Uncapitalize<
SnakeCaseWord extends `${infer Head}_${infer Tail}`
? SnakeToCamelCase<Tail, `${Result}${Capitalize<Head>}`>
: `${Result}${Capitalize<SnakeCaseWord>}`
>;
type CamelCaseObjectTypes<O extends object> = {
[key in keyof O as SnakeToCamelCase<key & string>]: O[key] extends Object
? CamelCaseObjectTypes<O[key]>
: O[key];
};
type BasicUserInfo = {
last_name: string;
first_name: string;
};
type Z = CamelCaseObjectTypes<BasicUserInfo>;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment