Skip to main content

27958 - CheckRepeatedTuple

Answer TestCases

判断一个元组类型中是否有相同的成员

例如:

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

Solution

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

通过 extendsinfer 组合将数组类型分离出首元素类型 First 和剩余元素类型 Rest

Rest 是一个数组 Rest[number] 返回数组元素组成的联合类型。

通过 First extends Rest[number] 可以确定 First 是否包含在剩余元素中

  • 包含,则说明有重复元素,返回 true
  • 不包含,则继续递归检查剩余元素