Created
April 27, 2023 17:47
-
-
Save dennisja/cbf2740937f9cada1e96eb26f7dc4f03 to your computer and use it in GitHub Desktop.
A typescript generic that converts object keys from snake to camelCase
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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