ghaiklor / type-challenges-solutions

Solutions for the collection of TypeScript type challenges with explanations
https://ghaiklor.github.io/type-challenges-solutions/
Creative Commons Attribution 4.0 International
471 stars 56 forks source link

type-challenges-solutions/en/medium-without #322

Open utterances-bot opened 1 year ago

utterances-bot commented 1 year ago

Without

This project is aimed at helping you better understand how the type system works, writing your own utilities, or just having fun with the challenges.

https://ghaiklor.github.io/type-challenges-solutions/en/medium-without.html

albert-luta commented 1 year ago

My try to implement it using tail recursion

type Without<
  T extends unknown[],
  U extends T[number] | T[number][],
  Acc extends unknown[] = []
> = [U] extends [unknown[]]
  ? Without<T, U[number]>
  : T extends [infer Head, ...infer Tail]
  ? Without<Tail, U, [...Acc, ...(Head extends U ? [] : [Head])]>
  : Acc;