1+ type StripOptional < T > = T extends `${infer U } ?` ? U : T ;
2+
13/**
24 * @params T - The URL e.g. /posts/:id
35 * @params TAcc - Accumulator object
@@ -6,17 +8,21 @@ type RecursivelyExtractPathParams<
68 T extends string ,
79 TAcc extends null | Record < string , string > ,
810> = T extends `/:${infer PathParam } /${infer Right } `
9- ? { [ key in PathParam ] : string } & RecursivelyExtractPathParams < Right , TAcc >
11+ ? {
12+ [ key in StripOptional < PathParam > ] : string ;
13+ } & RecursivelyExtractPathParams < Right , TAcc >
1014 : T extends `/:${infer PathParam } `
11- ? { [ key in PathParam ] : string }
15+ ? { [ key in StripOptional < PathParam > ] : string }
1216 : T extends `/${string } /${infer Right } `
1317 ? RecursivelyExtractPathParams < Right , TAcc >
1418 : T extends `/${string } `
1519 ? TAcc
1620 : T extends `:${infer PathParam } /${infer Right } `
17- ? { [ key in PathParam ] : string } & RecursivelyExtractPathParams < Right , TAcc >
21+ ? {
22+ [ key in StripOptional < PathParam > ] : string ;
23+ } & RecursivelyExtractPathParams < Right , TAcc >
1824 : T extends `:${infer PathParam } `
19- ? TAcc & { [ key in PathParam ] : string }
25+ ? TAcc & { [ key in StripOptional < PathParam > ] : string }
2026 : T extends `${string } /${infer Right } `
2127 ? RecursivelyExtractPathParams < Right , TAcc >
2228 : TAcc ;
0 commit comments