typescript / expert
Snippet
Kompilierzeit-Routenparameter-Extraktion für Framework-Router
Dieses Beispiel zeigt, wie Framework-Entwickler Routenparameter dynamisch zur Kompilierzeit aus einem Pfad-String-Literal unter Verwendung von TypeScript-Template-Literal-Inferenz und Rekursion extrahieren können. Das Ergebnis sind automatisch vervollständigte Parameter ohne manuelle Typ-Annotationen.
snippet.ts
typescript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
type ExtractRouteParams<Path extends string> =Path extends `${string}:${infer Param}/${infer Rest}`? { [K in Param | keyof ExtractRouteParams<`/${Rest}`>]: string }: Path extends `${string}:${infer Param}`? { [K in Param]: string }: {};class MicroRouter<const TPath extends string> {constructor(private readonly path: TPath) {}handle(callback: (params: ExtractRouteParams<TPath>) => void): void {// Implementation logic here}}const userRouter = new MicroRouter('/users/:userId/posts/:postId');userRouter.handle((params) => {console.log(params.userId, params.postId);});
Erklärung
1
type ExtractRouteParams<Path extends string> =
Definiert einen generischen Hilfstyp, der ein Pfad-String-Literal entgegennimmt.
2
Path extends `${string}:${infer Param}/${infer Rest}`
Verwendet Template-Literal-Musterabgleich, um den Parameternamen vor einem Schrägstrich und den restlichen Pfad zu inferieren.
3
? { [K in Param | keyof ExtractRouteParams<`/${Rest}`>]: string }
Erstellt rekursiv einen Objekttyp, der inferierte Parameternamen auf String-Werte abbildet.
4
class MicroRouter<const TPath extends string> {
Nutzt einen const-Typparameter-Modifikator, um wörtliche Pfad-String-Typen bei der Instanziierung beizuhalten.