typescript / expert
Snippet
Rekursive Template-Literal-Typ-Analyse für strukturierte Routen-Parameter
Dieses Experten-Snippet nutzt Template-Literal-Typen und bedingte Typinferenz, um dynamische Parameternamen aus einem URL-Routenpfad-String zur Kompilierzeit rekursiv zu extrahieren. Durch den Abgleich von Strings mit dynamischen Segmenten (`/:Param`) erfasst TypeScript infer die Parameter-Schlüssel und bildet eine einheitliche String-Literal-Union.
snippet.ts
typescript
1
2
3
4
5
6
7
8
type ExtractRouteParams<T extends string> =T extends `${string}/:${infer Param}/${infer Rest}`? Param | ExtractRouteParams<`/${Rest}`>: T extends `${string}/:${infer Param}`? Param: never;type Params = ExtractRouteParams<"/users/:userId/posts/:postId">;
Erklärung
1
type ExtractRouteParams<T extends string> =
Definiert einen generischen Typen, der eine String-Routenvorlage T entgegennimmt.
2
T extends `${string}/:${infer Param}/${infer Rest}`
Nutzt Template-Literal-Musterabgleich, um das dynamische Segment vor dem nächsten Schrägstrich zu isolieren.
3
? Param | ExtractRouteParams<`/${Rest}`>
Leitet den Parameternamen ab und analysiert den verbleibenden Pfad-String rekursiv.
4
: T extends `${string}/:${infer Param}`
Behandelt finale Parameter-Segmente am Ende des Routenpfads.
5
type Params = ExtractRouteParams<"/users/:userId/posts/:postId">;
Wertet den Typ aus und liefert die exakte Union 'userId' | 'postId'.