Open
Description
π Search Terms
"filter inference overload", "filter boolean"
π Version & Regression Information
- This is the behavior in every version I tried, and I reviewed the FAQ for entries about inferred types
β― Playground Link
π» Code
type NonFalsy<T> = T extends false | 0 | "" | null | undefined | 0n
? never
: T;
// Comment this out
interface Array<T> { filter(predicate: BooleanConstructor, thisArg?: any): NonFalsy<T>[]; }
const id = <T,>() => (t: T) => !!t;
['foo', 'bar'].filter(id())
// ^?
π Actual behavior
Nested function inference works (type parameter is string
) without the additional overload, and fails (type parameter is unknown
) with the overload (even though the added overload isn't the one in use).
π Expected behavior
Nested function inference should work regardless of whether an overload is added to .filter or not.
Additional information about the issue
Adding the overload is described in #50387 and made popular by ts-reset
.
It's possible the overload order may matter in this instance, but difficult to test when the main overloads are coming from lib definitions.