You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Argument of type '{ foo: <T>() => void; }' is not assignable to parameter of type '(() => void) & { foo: any; }'.
Type '{ foo: <T>() => void; }' is not assignable to type '() => void'.
Type '{ foo: <T>() => void; }' provides no match for the signature '(): void'.
This is an effect of #29847. Previously we'd only make inferences to single naked type parameters in unions and intersections. We now infer to each naked type parameter. That works well for union types, but not for intersection types as this example illustrates. I think we should revert to the previous behavior for intersection types and only infer to multiple naked type parameters in union types.
TypeScript Version: 3.4.0-rc
Search Terms: Type parameters, generics, inference, regression
Code
Expected behavior:
No error
Actual behavior:
Playground Link:
https://www.typescriptlang.org/play/#src=const%20foo%20%3D%20%3CT%3E()%20%3D%3E%20%7B%7D%3B%0D%0Aconst%20assign%20%3D%20%3CT%2C%20U%3E(a%3A%20T%2C%20b%3A%20U)%20%3D%3E%20Object.assign(a%2C%20b)%3B%0D%0Aconst%20result%3A%20(()%20%3D%3E%20void)%20%26%20%7B%20foo%3A%20any%20%7D%20%3D%20assign(()%20%3D%3E%20%7B%7D%2C%20%7B%20foo%20%7D)%3B
Related Issues:
Removing
<T>
fromfoo
makes this code valid.The text was updated successfully, but these errors were encountered: