#9896Medium

GetMiddleElement

Get the middle element of the array by implementing a `GetMiddleElement` method, represented by an array Master advanced TypeScript type manipulation in this medium-level challenge on TypeScriptPro.

In this medium-level challenge, you'll implement a GetMiddleElement type that extracts the middle element(s) from a tuple type, returning a single-element tuple for odd-length arrays and a two-element tuple for even-length arrays.

Challenge Instructions: GetMiddleElement

Medium

Get the middle element of the array by implementing a GetMiddleElement method, represented by an array

If the length of the array is odd, return the middle element If the length of the array is even, return the middle two elements

For example

type simple1 = GetMiddleElement<[1, 2, 3, 4, 5]>, // expected to be [3]
type simple2 = GetMiddleElement<[1, 2, 3, 4, 5, 6]> // expected to be [3, 4]

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

ChallengeSolution
type cases = [
  Expect<Equal<GetMiddleElement<[]>, []>>,
  Expect<Equal<GetMiddleElement<[1, 2, 3, 4, 5]>, [3]>>,
  Expect<Equal<GetMiddleElement<[1, 2, 3, 4, 5, 6]>, [3, 4]>>,
  Expect<Equal<GetMiddleElement<[() => string]>, [() => string]>>,
  Expect<
    Equal<GetMiddleElement<[() => number, '3', [3, 4], 5]>, ['3', [3, 4]]>
  >,
  Expect<
    Equal<
      GetMiddleElement<[() => string, () => number]>,
      [() => string, () => number]
    >
  >,
  Expect<Equal<GetMiddleElement<[never]>, [never]>>,
]
// @ts-expect-error
type error = GetMiddleElement<1, 2, 3>

Pro Challenge

Unlock 102+ medium, hard, and extreme challenges to master advanced TypeScript.

One-time payment. Lifetime access.

Detailed Explanation

type GetMiddleElement<T extends unknown[]> =
  T extends []
    ? []
    : T extends [infer Single]
      ? [Single]
      : T extends [infer A, infer B]
        ? [A, B]
        : T extends [unknown, ...infer Middle, unknown]
          ? GetMiddleElement<Middle>
          : never;

How it works:

This challenge helps you understand recursive tuple manipulation and variadic tuple inference, and how to apply these concepts in real-world scenarios.

This challenge is originally from here.

Share this challenge