Search Terms
tuple type rest spread typescript
Suggestion
I'd like to be able to write tuple types using the spread operator. For example:
typeFoo=[string, ...number[]];// first elt must be string, rest must be numbers
Currently, this produces an error at the ellipsis: "Type expected".
Here is a question asking much the same thing on Stack Overflow: https://stackoverflow.com/questions/44934541/how-to-use-the-spread-operator-in-a-typescript-tuple
It seems related to #10727, but that issue focuses on Object rest/spread, whereas this is specifically about tuples.
Use Cases
Typed tuples are part of the existing language. So it seems natural that one should be able to type rest arguments .
For example, if you want to represent a syntax tree, you might want to write:
typeFunCall=['FUNCALL',Symbol, ...Expression[]];// error in 2.9.1 :(typeSymbol=string;typeExpression=FunCall|Scalar;typeScalar=number|string|null;
But this isn't allowed in Typescript 2.9.1.
Examples
typeFoo=[string, ...number[]];constf1: Foo=["str",2,3,4];// should passconstf2: Foo=["str","2",3,4];// should fail: // "Type '(string | number)[]' is not assignable to type 'number[]'.constf2: Foo=["str",2,"3",4];// should fail:// "Type '(number | string)[]' is not assignable to type 'number[]'.constf1: Foo=[1,2,3,4];// should fail:// "Type 'number' is not assignable to type 'string'.
Checklist
My suggestion meets these guidelines:
Search Terms
tuple type rest spread typescript
Suggestion
I'd like to be able to write tuple types using the spread operator. For example:
Currently, this produces an error at the ellipsis: "Type expected".
Here is a question asking much the same thing on Stack Overflow: https://stackoverflow.com/questions/44934541/how-to-use-the-spread-operator-in-a-typescript-tuple
It seems related to #10727, but that issue focuses on Object rest/spread, whereas this is specifically about tuples.
Use Cases
Typed tuples are part of the existing language. So it seems natural that one should be able to type rest arguments .
For example, if you want to represent a syntax tree, you might want to write:
But this isn't allowed in Typescript 2.9.1.
Examples
Checklist
My suggestion meets these guidelines: