-
Notifications
You must be signed in to change notification settings - Fork 12.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Type parameter inference regression in 3.4 #30442
Comments
Reproducible in 3.4.1 |
@ahejlsberg contextual typing strikes again? Moving the initializer to its own expression resolves its problem const foo = <T,>() => {};
const assign = <T, U>(a: T, b: U) => Object.assign(a, b);
// No error
const res = assign(() => {}, { foo });
const result: (() => void) & { foo: any } = res; |
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: