import {CamelCase} from './camel-case'; /** Convert object properties to camel case recursively. This can be useful when, for example, converting some API types from a different style. @see CamelCasedProperties @see CamelCase @example ``` interface User { UserId: number; UserName: string; } interface UserWithFriends { UserInfo: User; UserFriends: User[]; } const result: CamelCasedPropertiesDeep = { userInfo: { userId: 1, userName: 'Tom', }, userFriends: [ { userId: 2, userName: 'Jerry', }, { userId: 3, userName: 'Spike', }, ], }; ``` @category Template Literals */ export type CamelCasedPropertiesDeep = Value extends Function ? Value : Value extends Array ? Array> : Value extends Set ? Set> : { [K in keyof Value as CamelCase]: CamelCasedPropertiesDeep; };