@@ -96,21 +96,23 @@ export type ToCamel<S extends string | number | symbol> = S extends string
9696 : never ;
9797
9898// eslint-disable-next-line @typescript-eslint/ban-types
99- export type ObjectToCamel < T extends object > = {
100- // eslint-disable-next-line @typescript-eslint/ban-types
101- [ K in keyof T as ToCamel < K > ] : T [ K ] extends Array < unknown >
102- ? // eslint-disable-next-line @typescript-eslint/ban-types
103- T [ K ] extends Array < infer ArrayType >
104- ? // eslint-disable-next-line @typescript-eslint/ban-types
105- ArrayType extends object
106- ? Array < ObjectToCamel < ArrayType > >
107- : T [ K ]
108- : never
109- : // eslint-disable-next-line @typescript-eslint/ban-types
110- T [ K ] extends object
111- ? ObjectToCamel < T [ K ] >
112- : T [ K ] ;
113- } ;
99+ export type ObjectToCamel < T extends object | undefined > = T extends undefined
100+ ? undefined
101+ : {
102+ // eslint-disable-next-line @typescript-eslint/ban-types
103+ [ K in keyof T as ToCamel < K > ] : T [ K ] extends Array < unknown >
104+ ? // eslint-disable-next-line @typescript-eslint/ban-types
105+ T [ K ] extends Array < infer ArrayType >
106+ ? // eslint-disable-next-line @typescript-eslint/ban-types
107+ ArrayType extends object
108+ ? Array < ObjectToCamel < ArrayType > >
109+ : T [ K ]
110+ : never
111+ : // eslint-disable-next-line @typescript-eslint/ban-types
112+ T [ K ] extends object | undefined
113+ ? ObjectToCamel < T [ K ] >
114+ : T [ K ] ;
115+ } ;
114116
115117export type ToSnake < S extends string | number | symbol > = S extends string
116118 ? S extends CapitalChars
@@ -153,20 +155,24 @@ export type ToSnake<S extends string | number | symbol> = S extends string
153155 : never ;
154156
155157// eslint-disable-next-line @typescript-eslint/ban-types
156- export type ObjectToSnake < T extends object > = {
157- [ K in keyof T as ToSnake < K > ] : T [ K ] extends Array < unknown >
158- ? // eslint-disable-next-line @typescript-eslint/ban-types
159- T [ K ] extends Array < infer ArrayType >
160- ? // eslint-disable-next-line @typescript-eslint/ban-types
161- ArrayType extends object
162- ? Array < ObjectToSnake < ArrayType > >
163- : T [ K ]
164- : never
165- : // eslint-disable-next-line @typescript-eslint/ban-types
166- T [ K ] extends object
167- ? ObjectToSnake < T [ K ] >
168- : T [ K ] ;
169- } ;
158+ export type ObjectToSnake < T extends object | undefined > = T extends undefined
159+ ? undefined
160+ : {
161+ [ K in keyof T as ToSnake < K > ] : T [ K ] extends Array < unknown >
162+ ? // eslint-disable-next-line @typescript-eslint/ban-types
163+ T [ K ] extends Array < infer ArrayType >
164+ ? // eslint-disable-next-line @typescript-eslint/ban-types
165+ ArrayType extends object
166+ ? Array < ObjectToSnake < ArrayType > >
167+ : T [ K ]
168+ : never
169+ : // eslint-disable-next-line @typescript-eslint/ban-types
170+ T [ K ] extends object | undefined
171+ ? ObjectToSnake < T [ K ] >
172+ : // Exclude<T[K], undefined> extends object
173+ // ? ObjectToSnake<Exclude<T[K], undefined>>
174+ T [ K ] ;
175+ } ;
170176
171177type CapitalLetters =
172178 | 'A'
0 commit comments