Skip to content

Commit 0f83c2c

Browse files
committed
rewrite GetRouteParameter to work on long paths #54151 (comment)
1 parent 2fc8476 commit 0f83c2c

File tree

2 files changed

+9
-12
lines changed

2 files changed

+9
-12
lines changed

types/express-serve-static-core/express-serve-static-core-tests.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -80,12 +80,11 @@ app.get('/:foo/:bar(\\d:+)/:baz', req => {
8080
req.params.quxx; // $ExpectType string
8181
});
8282

83-
// long path parameters - not supported - https://github.com/DefinitelyTyped/DefinitelyTyped/pull/53513#issuecomment-870550063
83+
// long path parameters - https://github.com/DefinitelyTyped/DefinitelyTyped/pull/53513#issuecomment-870550063
8484
app.get('/website-api/jobalarm/:jobalarmId/:subscriptionId/search', req => {
85-
req.params.foo; // $ExpectType string
86-
req.params.bar; // $ExpectType string
87-
req.params.qux; // $ExpectType string
88-
req.params.quxx; // $ExpectType string
85+
req.params.jobalarmId; // $ExpectType string
86+
req.params.subscriptionId; // $ExpectType string
87+
req.params.foo; // $ExpectError
8988
});
9089

9190
// Query can be a custom type

types/express-serve-static-core/index.d.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -98,13 +98,11 @@ export type RequestHandlerParams<
9898
| ErrorRequestHandler<P, ResBody, ReqBody, ReqQuery, Locals>
9999
| Array<RequestHandler<P> | ErrorRequestHandler<P>>;
100100

101-
type GetRouteParameter<RouteAfterColon extends string, Depth extends never[] = []> = Depth['length'] extends 10
102-
? never
103-
: RouteAfterColon extends `${infer Char}${infer Rest}`
104-
? Char extends '/' | '-' | '.'
105-
? ''
106-
: `${Char}${GetRouteParameter<Rest, [...Depth, never]>}`
107-
: RouteAfterColon;
101+
type RemoveTail<S extends string, Tail extends string> = S extends `${infer P}${Tail}` ? P : S;
102+
type GetRouteParameter<S extends string> = RemoveTail<
103+
RemoveTail<RemoveTail<S, `/${string}`>, `-${string}`>,
104+
`.${string}`
105+
>;
108106

109107
// prettier-ignore
110108
export type RouteParameters<Route extends string> = string extends Route

0 commit comments

Comments
 (0)