타입 챌린지 9616 - Parse URL Params

소파의 벨로그·2025년 5월 13일

타입챌린지

목록 보기
82/131

문제 링크

문제

당신은 URL 파라미터 문자열을 유니온 타입으로 파싱하는 타입 레벨의 파서를 구현해야 한다.

You're required to implement a type-level parser to parse URL params string into an Union.

내 풀이

type SlashSplitted<S extends string>=
  S extends `${infer R}/${infer Rest}`?
    [R,...SlashSplitted<Rest>]
    :[S]

type ParseUrlParamsImplement<S extends string, U extends string=SlashSplitted<S>[number]>=
  U extends `:${infer Target}`?Target:never

type ParseUrlParams<T extends string> = ParseUrlParamsImplement<T>

우선 사용처에서 구현용 제네릭을 사용하지 못하게 하기 위해 구현과 실제 타입을 분리했다.

우선 슬래시 기준으로 split을 해주었다.

이후 split된 값 중 콜론(:)이 붙어있는 요소들을 반환했다.
이때, 분배법칙을 사용하기 위해 U extends string = SlashSplitted<S>[number]라는 제네릭을 사용했다.

다른 사람의 풀이

type ParseUrlParams<T> = T extends `${string}:${infer R}`
  ? R extends `${infer P}/${infer L}`
    ? P | ParseUrlParams<L>
    : R
  : never

해당 풀이

T가 : 가 중간에 끼여있는 경우가 아니면 never를 반환한다.
그렇지 않다면,
1) : 뒤에 있는 문자에 슬래시가 끼여있으면, 슬래시 앞 값과 T에 슬래쉬 뒤에 있는 값을 넣어서 반환
2) 그렇지 않다면 그냥 해당 값을 반환한다.

참고자료

https://github.com/type-challenges/type-challenges/issues/30353

0개의 댓글