-
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
Generic type constraint does not apply to rest parameters #2328
Comments
This is technically by design but it's a reasonable suggestion. We also don't allow subtypes of array without generics. |
Spec section 3.8.2.2 |
This doesn't actually make sense. The function should be rewritten this way: function attach<T>(cb: (...args: T[]) => void): void { } Any production that requires that you write |
@RyanCavanaugh what if the function is meant to be used like the following? attach((age: number, name: string) => {
console.log({ age, name });
});
// written explicitly:
attach<[number, string]>(/*... */); Using the |
If that's the desired behavior you'd be better off writing some explicit overloads e.g. https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/underscore/underscore.d.ts#L1126 |
As a library author this makes me sad, since with overloading you lose the parameter name information. Plus it produces ugly inline documentation. |
I'd love to see this decision reconsidered. As I understand it, one of TypeScript's major design goals is to have a type system flexible enough to represent any common JavaScript design pattern. Rest parameters have been supported for years, and generics are a vital part of TypeScript, the fact that you can't use both together is unfortunate. |
I'd also like to be able to use this feature. I'm building an abstract command pattern class that I'd like to do something like this for:
Requiring implementing classes to override every method in the abstract class just to provide a type definition is ugly. Implementing this issue's feature would solve this nicely. |
The following fails to compile even though T is constrained to an array type:
The text was updated successfully, but these errors were encountered: