#9616Medium

Parse URL Params

You're required to implement a type-level parser to parse URL params string into an Union. Learn conditional types with `infer` in this medium-level challenge on TypeScriptPro.

In this medium-level challenge, you'll implement a type-level parser that extracts URL parameter names (prefixed with :) from a URL path string and produces a union of those parameter names.

Challenge Instructions: Parse URL Params

Medium

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

ParseUrlParams<':id'> // id
ParseUrlParams<'posts/:id'> // id
ParseUrlParams<'posts/:id/:user'> // id | user

Change the following code to make the test cases pass (no type check errors).

ChallengeSolution
type cases = [
  Expect<Equal<ParseUrlParams<''>, never>>,
  Expect<Equal<ParseUrlParams<':id'>, 'id'>>,
  Expect<Equal<ParseUrlParams<'posts/:id'>, 'id'>>,
  Expect<Equal<ParseUrlParams<'posts/:id/'>, 'id'>>,
  Expect<Equal<ParseUrlParams<'posts/:id/:user'>, 'id' | 'user'>>,
  Expect<Equal<ParseUrlParams<'posts/:id/:user/like'>, 'id' | 'user'>>,
]

Pro Challenge

Unlock 102+ medium, hard, and extreme challenges to master advanced TypeScript.

One-time payment. Lifetime access.

Detailed Explanation

type ParseUrlParams<T extends string> =
  T extends `${string}:${infer Param}/${infer Rest}`
    ? Param | ParseUrlParams<Rest>
    : T extends `${string}:${infer Param}`
      ? Param
      : never

How it works:

This challenge helps you understand recursive template literal type parsing with infer and how to apply this concept in real-world scenarios like type-safe routing.

This challenge is originally from here.

Share this challenge

Learn the Concepts