대상 배열 에서 오직 한 번만 나타나는 요소를 찾아라
Find the elements in the target array that appear only once.
type EqaulIncludes<T extends any[],Target>=
T extends [infer Start,...infer Rest]?
Equal<Target,Start> extends true?true
:EqaulIncludes<Rest,Target>
:false
type FindElesImplement<T extends any[], Used extends any[]=[]>=
T extends [infer First, ...infer Rest]?
EqaulIncludes<[...Used,...Rest],First> extends true?
FindElesImplement<Rest,[...Used,First]>
:[First,...FindElesImplement<Rest,[...Used,First]>]
:[]
type FindEles<T extends any[]> = FindElesImplement<T>
우선 사용처에서 구현용 제네릭을 사용하지 못하게 하기 위해 구현과 실제 타입을 분리했다.
사용처에서 number등 여러 타입을 포함하는 타입이 T에 올 수 있기 때문에, 확실히 같은 타입인지를 확인하기 위해서 Eqaul을 통해 배열 내부에 같은 값이 존재하는 지 확인했다.
재귀적으로 확인하여 최종적으로 Result를 반환한다.