目前只能解析类似/user/:id/update/:id2
且始终为字符串的内容。
type Data = "/user/:id/update/:id2" // -> { id: string, id2: string }
type Parse<T extends string, Memo extends string[] = []> =
T extends `${infer Part}/${infer Others}`
? Part extends `:${infer Value}` ? Parse<Others, [...Memo, Value]> : Parse<Others, Memo>
: T extends `:${infer Value}` ? [...Memo, Value] : Memo;
type TupleToObject<T extends string[]> = {
[Key in T[number]]: string
}
// { id: string, id2: string }
type Result = TupleToObject<Parse<Data>>
是否可以像这样解析某个时间"/user/:id(string)/update/:id2(number)/:id3"
?如果未指定,则默认为字符串。这会是:
{
id: string;
id2: number;
id3: string;
}
另外,是否可以让代码变得更简单。