-
Notifications
You must be signed in to change notification settings - Fork 13k
Closed
Labels
Fix AvailableA PR has been opened for this issueA PR has been opened for this issueIn DiscussionNot yet reached consensusNot yet reached consensusSuggestionAn idea for TypeScriptAn idea for TypeScript
Milestone
Description
TypeScript Version: 3.1.0-dev.20180801
Search Terms: spread tuple
Code
interface Foo<ArgsT extends any[]> {}
interface Bar<SubArgsT extends any[]> extends Foo<[number, ...SubArgsT]>{ }
Expected behavior: Successful compilation. Array subclasses are not allowed as rest arguments for now, but when it is about generics I expect behavior similar to what is done in #24897
Actual behavior: Failed with TS2574: A rest element type must be an array type.
j-f1, Kinrany, McPrescott, rajendranr-5483, earthlyreason and 51 more
Metadata
Metadata
Assignees
Labels
Fix AvailableA PR has been opened for this issueA PR has been opened for this issueIn DiscussionNot yet reached consensusNot yet reached consensusSuggestionAn idea for TypeScriptAn idea for TypeScript
Type
Projects
Relationships
Development
Select code repository
Activity
AlCalzone commentedon Aug 1, 2018
Interstingly, adding angled brackets works (but requires an array of arrays following the number):
And this correctly captures the type OP wants to create
but an interface cannot extend that.
McPrescott commentedon Sep 10, 2018
Similarly, it seems that following the last example of @AlCalzone that rest element types should be able to be inferred without having to use a functions parameter list like so:
But the same error occurs: A rest element type must be an array type.
cshaa commentedon Oct 16, 2018
A minimal example showing the non-symmetricity of function arguments vs. tuple types.
I think this should be supported and it seems as an oversight to me that it isn't in 3.1 already.
Is there a specific reason for it to be disallowed, or is it just that it wasn't top priority?
Also, it took me quite a long time to find this issue, so I'm adding a few keywords.
Keywords: spread a generic tuple in a tuple type, generic tuple rest parameter in a tuple type, spreading array type in type declaration,
T extends any[]
does not work in tuple literalpaul-marechal commentedon Aug 25, 2019
I would like to extend this issue for code looking like the following:
Hopefully this all boils down to the same actual bug.
ghost commentedon Jan 24, 2020
This still seems to be an issue. I have the simple case:
Which fails currently because it can't determine that
U
is valid as a rest parameter.4 remaining items