diff --git a/index.d.ts b/index.d.ts index e1e9416..f4ee3c3 100644 --- a/index.d.ts +++ b/index.d.ts @@ -45,13 +45,16 @@ export type CamelCaseKeys< > = T extends readonly any[] // Handle arrays or tuples. ? { - [P in keyof T]: CamelCaseKeys< - T[P], - Deep, - IsPascalCase, - Exclude, - StopPaths - >; + // eslint-disable-next-line @typescript-eslint/ban-types + [P in keyof T]: {} extends CamelCaseKeys + ? T[P] + : CamelCaseKeys< + T[P], + Deep, + IsPascalCase, + Exclude, + StopPaths + >; } : T extends Record // Handle objects. @@ -64,16 +67,19 @@ export type CamelCaseKeys< true, ] ? T[P] - : [Deep] extends [true] - ? CamelCaseKeys< - T[P], - Deep, - IsPascalCase, - Exclude, - StopPaths, - AppendPath - > - : T[P]; + // eslint-disable-next-line @typescript-eslint/ban-types + : {} extends CamelCaseKeys + ? T[P] + : [Deep] extends [true] + ? CamelCaseKeys< + T[P], + Deep, + IsPascalCase, + Exclude, + StopPaths, + AppendPath + > + : T[P]; } // Return anything else as-is. : T; diff --git a/index.test-d.ts b/index.test-d.ts index f2b2f99..2ee6076 100644 --- a/index.test-d.ts +++ b/index.test-d.ts @@ -350,3 +350,27 @@ expectNotType( exclude, }), ); + +expectType<{ + funcFoo: () => 'foo'; + recordBar: {foo: string}; + promiseBaz: Promise; +}>(camelcaseKeys({ + func_foo: () => 'foo', + record_bar: {foo: 'bar'}, + promise_baz: new Promise(resolve => { + resolve(true); + }), + })); + +expectType<[ + () => 'foo', + {foo: string}, + Promise, +]>(camelcaseKeys([ + () => 'foo', + {foo: 'bar'}, + new Promise(resolve => { + resolve(true); + }), + ]));