Closed as not planned
Description
π Search Terms
NoInfer, overload
π Version & Regression Information
Version 5.4.3
- I was unable to test this on prior versions because this is a new feature
β― Playground Link
π» Code
declare function produce(f: NoInfer<() => void>): () => void;
declare function produce<A>(f: NoInfer<(arg: A) => void>): (arg: A) => void;
const x: () => void = produce(() => 1); // works
const y: (arg: string) => void = produce((v) => 1); // Parameter 'v' implicitly has an 'any' type.
π Actual behavior
Because const y
is explicitly typed and thanks to the new utility NoInfer
type, the compiler is able to figure out (from the return type) it is calling the produce<string>()
overload. (Without NoInfer
it would just be produce<any>()
).
However, apparently it does not apply this knowledge to the function parameter f
and thus the non type-hinted argument v
is inferred as any
π Expected behavior
Since the compiler already knows f
is of type NoInfer<(arg:string)=>void>
it should be able to infer the lambda argument v
to be of string
type.
Additional information about the issue
No response