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]
풀이
조건
- 튜플 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