본문 바로가기
Language/Typescript

타입챌린지 : 531-String to Union (medium)

by hsloth 2023. 4. 11.

 

이 글은 제가 타입챌린지를 하면서 해석한 내용을 적는 글입니다. 틀린 내용이 있으면 댓글 달아주시면 감사하겠습니다.

 

https://github.com/type-challenges/type-challenges/blob/main/questions/00531-medium-string-to-union/README.md

 

GitHub - type-challenges/type-challenges: Collection of TypeScript type challenges with online judge

Collection of TypeScript type challenges with online judge - GitHub - type-challenges/type-challenges: Collection of TypeScript type challenges with online judge

github.com

 

문자열을 하나씩 쪼개서 유니온으로 만드는 타입이다.

 

아래 문제와 비슷하니 아래 문제도 참고해보자.

https://suloth.tistory.com/51

 

타입챌린지 : 10-Tuple To Union (medium)

이 글은 제가 타입챌린지를 하면서 해석한 내용을 적는 글입니다. 틀린 내용이 있으면 댓글 달아주시면 감사하겠습니다. https://github.com/type-challenges/type-challenges/blob/main/questions/00010-medium-tuple-to-un

suloth.tistory.com

 

이것도 지금까지 타입챌린지를 꾸준히 해온 사람이라면 금방 풀 수 있을 것 같다. 실제로 나도 5분도 안걸린 것 같다.

type StringToUnion<T extends string> = T extends `${infer F}${infer O}` ? 
	F | StringToUnion<O> : never;

T extends `${infer F}${infer O}` ? : 만약 T가 하나의 문자 F와 나머지 문자열 O로 나뉘어 진다면 (우리는 infer F, infer O로 문자열을 나눈다면 F에는 문자 하나만 들어간다는 것을 알고 있다! 만약 몰랐다면, 기억하자!)

F | StringToUnion<O> : never; : F | StringToUnion<O>를 리턴한다. StringToUnion<O>를 타면, 재귀하면서 유니온을 하나씩 늘려간다. 만약 문자열이 없다면, never를 리턴한다. (문자열이 하나만 있어도 ${infer F}${infer O}를 extends하는걸로 취급된다)