Naming Generics
type ParseRouteParameters<TRoute> =
Route extends `${string}/:${infer TParam}/${infer TRest}` ?
{ [TEntry in TParam | keyof ParseRouteParameters<`/${TRest}`>]: string } :
Route extends `${string}/:${infer TParam}` ?
{ [TEntry in TParam]: string } : {}