Parse URL Params
Less than 1 minuteTC-Medium
Parse URL Params
Problem
You're required to implement a type-level parser to parse URL params string into a Union.
ParseURLParams<':id'> // 'id'
ParseURLParams<'posts/:id'> // 'id'
ParseURLParams<'posts/:id/:user'> // 'id' | 'user'Solution
Approach: Template Literal Pattern Matching
Match the :param pattern and collect all parameter names.
type ParseURLParams<T extends string> =
T extends `${string}:${infer Param}/${infer Rest}`
? Param | ParseURLParams<Rest>
: T extends `${string}:${infer Param}`
? Param
: neverHow it works:
- First try to match
...:param/rest— extractParambefore a/and recurse onRest. - If that fails, try
...:paramat the end of the string — no trailing/. - If neither pattern matches, return
never(no params).
The ${string} at the start greedily consumes any prefix before :.
Key Takeaways
- Two-pattern matching (with slash, without slash) handles both middle and last parameters cleanly.
${string}matches zero or more characters — useful for consuming arbitrary prefixes.- Recursion collects multiple parameters as a union via
|.
