capypad
0 Tage Serie
typescript / expert
Snippet

Rekursives Parsen von Template-Literal-Typen

Dieses Snippet nutzt Template-Literal-Typen und rekursive bedingte Typen, um dynamische Pfadparameter zur Kompilierzeit aus einem String-Literal zu extrahieren. Es zeigt, wie TypeScript Strings parsen kann, um komplexe Objekttypen basierend auf Konventionen wie ':param' zu erstellen.

snippet.ts
typescript
1
2
3
4
5
6
7
8
9
10
type ExtractParams<T extends string> =
T extends `${string}:${infer Param}/${infer Rest}`
? { [K in Param | keyof ExtractParams<Rest>]: string }
: T extends `${string}:${infer Param}`
? { [K in Param]: string }
: {};
 
const route = "/user/:id/posts/:postId";
type RouteParams = ExtractParams<typeof route>;
// Result: { id: string; postId: string; }
Erklärung
1
T extends `${string}:${infer Param}/${infer Rest}`
Prüft, ob der String einen Doppelpunkt gefolgt von einem Segment vor einem Schrägstrich enthält, und erfasst sowohl den Parameter als auch den Rest.
2
{ [K in Param | keyof ExtractParams<Rest>]: string }
Mappt den erfassten Parameter rekursiv und führt ihn mit den aus dem Rest des Strings extrahierten Parametern zusammen.