ghaiklor / type-challenges-solutions

Solutions for the collection of TypeScript type challenges with explanations

Home Page:https://ghaiklor.github.io/type-challenges-solutions/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

type-challenges-solutions/en/medium-without

utterances-bot opened this issue · comments

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

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;