Rest elements let you collect multiple values into one place inside a tuple. It helps when you want to handle many items without naming each one.
Rest elements in tuples in Typescript
type MyTuple = [string, ...number[]];
The ... before a type means 'rest element' that collects multiple items.
Rest elements must be last in the tuple.
type Names = [string, ...string[]]; const group1: Names = ['Alice', 'Bob', 'Charlie']; const group2: Names = ['Dave'];
type Data = [number, boolean, ...string[]]; const example: Data = [42, true, 'extra', 'values'];
type Mixed = [...string[], number]; // Error: rest element must be lastThis program defines a tuple with a string, a number, and then any number of booleans. It shows two examples: one with extra booleans and one without.
type Info = [string, number, ...boolean[]]; const person1: Info = ['John', 30, true, false]; const person2: Info = ['Jane', 25]; console.log(person1); console.log(person2);
Rest elements help keep tuples flexible and easy to work with.
Remember, rest elements must always be last in the tuple definition.
TypeScript checks the types of all elements, including those in the rest.
Rest elements collect multiple items into one part of a tuple.
They must be placed at the end of the tuple.
They make tuples flexible for different lengths of data.
Practice
What is the main purpose of using rest elements in TypeScript tuples?
Solution
Step 1: Understand rest elements in tuples
Rest elements gather multiple items into one part of a tuple, allowing flexible length.Step 2: Identify the purpose
This means rest elements help collect many elements into one part of a tuple, not fix length or types.Final Answer:
To collect multiple elements into a single tuple part -> Option DQuick Check:
Rest elements collect multiple items [OK]
- Thinking rest elements fix tuple length
- Using ... without array type
- Confusing rest elements with tuple immutability
Which of the following is the correct syntax for a tuple with a rest element in TypeScript?
type MyTuple = [number, ...string[]];Solution
Step 1: Check rest element syntax
Rest elements use three dots (...) before a type array, placed at the end.Step 2: Validate each option
type MyTuple = [number, ...string[]]; correctly uses [...string[]] after number. Others misuse syntax or placement.Final Answer:
type MyTuple = [number, ...string[]]; -> Option CQuick Check:
Rest element syntax = ...type[] at end [OK]
- Placing rest element in the middle
- Omitting brackets around rest type
- Using ...type instead of ...type[]
What will be the output of the following TypeScript code?
type Tuple = [string, ...number[]];
const example: Tuple = ['start', 1, 2, 3];
console.log(example.length);Solution
Step 1: Understand tuple and rest element
The tuple starts with a string, then any number of numbers via rest element.Step 2: Count elements in example
example has 'start', 1, 2, 3 which is 4 elements total.Final Answer:
4 -> Option BQuick Check:
Tuple length counts all elements including rest [OK]
- Counting only fixed elements ignoring rest
- Expecting error due to rest element
- Confusing tuple length with rest array length
Identify the error in this tuple type declaration:
type WrongTuple = [...string, number];Solution
Step 1: Check rest element syntax
Rest elements must use an array or tuple type after ..., like ...string[].Step 2: Analyze given tuple
Here, ...string uses primitive string, not array/tuple type, invalid syntax.Final Answer:
Rest element must be an array type -> Option AQuick Check:
Rest element type = array/tuple only [OK]
- Using ... with non-array type like ...string
- Thinking rest element can't be array type
- Confusing tuple length limits
Given the tuple type type Data = [string, ...number[], boolean], which of the following assignments is valid?
A) const a: Data = ['hello', 1, 2, true];
B) const b: Data = ['hello', 42];
C) const c: Data = ['hello', 1, 2, 3, false];
D) const d: Data = ['hello', 1, false, 2];Solution
Step 1: Understand tuple with rest element in middle
Type[string, ...number[], boolean]means string first, then any numbers, then boolean last.Step 2: Check each assignment
A) Ends with true (boolean), numbers in middle: ['hello',1,2,true] valid.
B) Missing boolean after numbers, only string and number: invalid.
C) Ends with false (boolean), numbers in middle: valid.
D) Boolean before number (false before 2): invalid order.Final Answer:
Only A and C are valid -> Option AQuick Check:
Rest numbers must be between string and boolean [OK]
- Placing boolean before rest numbers
- Omitting rest numbers entirely
- Assuming rest can be anywhere
Ready to prove it?
Pass the test and this pattern moves unknown
