#27958Medium

CheckRepeatedTuple

Implement type `CheckRepeatedChars<T>` which will return whether type `T` contains duplicated member Master advanced TypeScript type manipulation in this medium-level challenge on TypeScriptPro.

In this medium-level challenge, you'll implement CheckRepeatedTuple<T> which checks whether a tuple type contains any duplicated members, returning true or false.

Challenge Instructions: CheckRepeatedTuple

Medium

Implement type CheckRepeatedChars<T> which will return whether type T contains duplicated member

For example:

type CheckRepeatedTuple<[1, 2, 3]>   // false
type CheckRepeatedTuple<[1, 2, 1]>   // true

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

ChallengeSolution
type cases = [
  Expect<Equal<CheckRepeatedTuple<[number, number, string, boolean]>, true>>,
  Expect<Equal<CheckRepeatedTuple<[number, string]>, false>>,
  Expect<Equal<CheckRepeatedTuple<[1, 2, 3]>, false>>,
  Expect<Equal<CheckRepeatedTuple<[1, 2, 1]>, true>>,
  Expect<Equal<CheckRepeatedTuple<[]>, false>>,
  Expect<Equal<CheckRepeatedTuple<string[]>, false>>,
  Expect<
    Equal<
      CheckRepeatedTuple<
        [number, 1, string, '1', boolean, true, false, unknown, any]
      >,
      false
    >
  >,
  Expect<Equal<CheckRepeatedTuple<[never, any, never]>, true>>,
]

Pro Challenge

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

One-time payment. Lifetime access.

Detailed Explanation

type Includes<T extends unknown[], V> = T extends [infer First, ...infer Rest]
  ? Equal<First, V> extends true
    ? true
    : Includes<Rest, V>
  : false
 
type CheckRepeatedTuple<T extends unknown[]> = T extends [infer First, ...infer Rest]
  ? Includes<Rest, First> extends true
    ? true
    : CheckRepeatedTuple<Rest>
  : false

How it works:

This challenge helps you understand recursive tuple analysis with strict type equality, and how to apply these concepts in real-world scenarios.

This challenge is originally from here.

Share this challenge