Some kind of values (such as functions, records, or promises) are incorrectly inferred as {} when deep option is enabled. It is because CamelCaseKeys accepts Record<string, any> and so it admits some non-record-like types such as functions while it infer them as {}. For example, () => number extends Record<string, any> and CamelCaseKeys<() => number> is {}.
This cause some trouble when you use types like FileList since many of its values would be inferred as {}. I fixed the issue by adding a condition for whether CamelCaseKeys<T[P]> is too wide or not.
Description
Some kind of values (such as functions, records, or promises) are incorrectly inferred as
{}
when deep option is enabled. It is because CamelCaseKeys acceptsRecord<string, any>
and so it admits some non-record-like types such as functions while it infer them as{}
. For example,() => number
extendsRecord<string, any>
andCamelCaseKeys<() => number>
is{}
.Reproduction Link
This cause some trouble when you use types like FileList since many of its values would be inferred as
{}
. I fixed the issue by adding a condition for whetherCamelCaseKeys<T[P]>
is too wide or not.