튜플 T에서 주어진 타입 F의 요소를 걸러내는 타입 FilterOut<T, F>를 구현하라
Implement a type FilterOut<T, F> that filters out items of the given type F from the tuple T.
type FilterOut<T extends any[], F> =
T extends [infer Head,...infer Rest]?
[Head] extends [F]?FilterOut<Rest,F>
:[Head,...FilterOut<Rest,F>]
:[]
이 문제의 핵심은 Head에 never가 들어가는 경우이다. Head에 never가 들어가는 경우 분배법칙이 적용되지 않아 never가 분배되지 않는다. 그래서 Head와 F를 배열로 감싸서 확장되는지를 확인한다.