FE/type-challenge

10. TupleToUnion

최토피 2023. 9. 4. 12:25
728x90

문제

튜플 값으로 유니온 타입을 생성하는 제네릭 TupleToUnion<T>를 구현하세요.

type Arr = ['1', '2', '3']

type Test = TupleToUnion<Arr> // expected to be '1' | '2' | '3'

cases

type cases = [
  Expect<Equal<TupleToUnion<[123, '456', true]>, 123 | '456' | true>>,
  Expect<Equal<TupleToUnion<[123]>, 123>>,
]

문제 링크

정답

type TupleToUnion<T extends any[]> = T[number]

풀이

조건

  1. 튜플 T 의 요소를 Union으로 결합하여 출력한다.

해설

T의 요소를 순차적으로 가져오기 위해서 infer를 사용한다.

type TupleToUnion<T extends any[]> = T extends [infer T1, ...infer Rest]
  ? T1
  : never

이를 재귀적으로 사용하여 T 의 모든 요소를 순차적으로 가져온다.

type TupleToUnion<T extends any[]> = T extends [infer T1, ...infer Rest]
  ? T1 | TupleToUnion<Rest>
  : never

리팩토링

위의 코드는 다음과 같이 줄일 수 있다.

type TupleToUnion<T extends any[]> = T[number]

혹시 개선점이나 오류가 있다면 댓글 부탁드립니다.

728x90