#21220Medium

Permutations of Tuple

Given a generic tuple type `T extends unknown[]`, write a type which produces all permutations of `T` as a union. Learn union type manipulation, tuple manipulation in this medium-level challenge on TypeScriptPro.

In this medium-level challenge, you'll write a type that takes a tuple and produces a union of all possible permutations of that tuple's elements, preserving their individual types.

Challenge Instructions: Permutations of Tuple

Medium

Given a generic tuple type T extends unknown[], write a type which produces all permutations of T as a union.

For example:

PermutationsOfTuple<[1, number, unknown]>
// Should return:
// | [1, number, unknown]
// | [1, unknown, number]
// | [number, 1, unknown]
// | [unknown, 1, number]
// | [number, unknown, 1]
// | [unknown, number ,1]

Change the following code to make the test cases pass (no type check errors).

Loading...

Detailed Explanation

type PermutationsOfTuple<T extends unknown[], Prev extends unknown[] = []> =
  T extends [infer First, ...infer Rest]
    ? [First, ...PermutationsOfTuple<[...Prev, ...Rest]>] | PermutationsOfTuple<Rest, [...Prev, First]>
    : Prev extends []
      ? []
      : never

How it works:

This challenge helps you understand recursive tuple manipulation combined with union distribution, and how to apply these concepts in real-world scenarios.

This challenge is originally from here.

Share this challenge

Learn the Concepts

Join early, learn faster.

Be the first to access the course, unlock exclusive launch bonuses, and get special early-bird pricing before anyone else.

No spam, unsubscribe at any time. We respect your privacy.

Limited Availability

Only 27 Spots left

Early Access

Get 1 month early access

>75% Off

Pre-Launch discount