🔎 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
https://www.typescriptlang.org/play?#code/CYUwxgNghgTiAEAzArgOzAFwJYHtXwAcYdhkwQAKRALngDkcBJVREGAHgoEp4BeAPngA3HFmD8utbn0EixAbgBQoSLAQp02PIWKly7AIL8qtBs1YcKsAOa0DPAcNHjJ8KzFvx7MpwsWKwPABnDHgADykHWWc+HRIySmlHAEYuJUDUEPgATykbWhCYLFRrKN9gWKJ48goKITLUpSA
💻 Code
declarefunctionproduce(f: NoInfer<()=>void>): ()=>void;declarefunctionproduce<A>(f: NoInfer<(arg: A)=>void>): (arg: A)=>void;constx: ()=>void=produce(()=>1);// worksconsty: (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
🔎 Search Terms
NoInfer, overload
🕗 Version & Regression Information
Version 5.4.3
⏯ Playground Link
https://www.typescriptlang.org/play?#code/CYUwxgNghgTiAEAzArgOzAFwJYHtXwAcYdhkwQAKRALngDkcBJVREGAHgoEp4BeAPngA3HFmD8utbn0EixAbgBQoSLAQp02PIWKly7AIL8qtBs1YcKsAOa0DPAcNHjJ8KzFvx7MpwsWKwPABnDHgADykHWWc+HRIySmlHAEYuJUDUEPgATykbWhCYLFRrKN9gWKJ48goKITLUpSA
💻 Code
🙁 Actual behavior
Because
const yis explicitly typed and thanks to the new utilityNoInfertype, the compiler is able to figure out (from the return type) it is calling theproduce<string>()overload. (WithoutNoInferit would just beproduce<any>()).However, apparently it does not apply this knowledge to the function parameter
fand thus the non type-hinted argumentvis inferred asany🙂 Expected behavior
Since the compiler already knows
fis of typeNoInfer<(arg:string)=>void>it should be able to infer the lambda argumentvto be ofstringtype.Additional information about the issue
No response