Parse URL Params
问题描述
你需要实现一个类型级别的解析器,将URL参数字符串解析成一个联合类型。
举例:
ParseUrlParams<':id'> // id
ParseUrlParams<'posts/:id'> // id
ParseUrlParams<'posts/:id/:user'> // id | user
// ============= Test Cases =============
import type { Equal, Expect } from './test-utils'
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'>>,
]
// ============= Your Code Here =============
// 答案
type ParseUrlParams<T> = T extends `${string}:${infer R}`
? R extends `${infer P}/${infer L}`
? P | ParseUrlParams<L>
: R
: never