This solution is generated by ChatGPT, correctness is not guaranteed. You might also be able to find a solution fromcommunity posts.
AI solution for TypeScript puzzle on BFE.dev
62. implement Unique<T extends any[]>
To implement the Unique type in TypeScript, we can leverage the power of conditional types and the keyof
keyword to create a type that deduplicates an array of strings.
Here is the implementation of the Unique type:
type Unique<T extends Array<any>> = T extends [infer U, ...infer R] ? U extends string ? [U, ...Unique<{ [K in keyof R]: R[K] extends U ? never : R[K] }>] : never : []type A = Unique<['A', 'A', 'A', 'B', 'B', 'C']>// A resolves to ['A', 'B', 'C']
Let's break down the implementation step by step:
- The Unique type takes a type parameter T that extends an Array of any type
T extends Array<any>
. - We use conditional types to check if the input array T can be deconstructed into a tuple
[infer U, ...infer R]
. - We then check if the first element U of the array is a string
U extends string
. - If U is a string, we recursively call the Unique type on the rest of the array excluding any elements that are equal to U using a mapped type
{ [K in keyof R]: R[K] extends U ? never : R[K] }
. This effectively removes any duplicate occurrences of the string U in the resulting array. - If U is not a string, we return
never
to exclude it from the resulting array. - Finally, we return an empty array
[]
when the input array T is empty.
When we use the Unique type with the example Unique<['A', 'A', 'A', 'B', 'B', 'C']>
, the type A resolves to ['A', 'B', 'C']
which deduplicates the string array as expected.