typescript / expert
Snippet
Typsichere Array-Invarianz-Validierung für Mock-Testumgebungen
Dieses Muster nutzt Rest-Tupel-Inferenz, um die Nicht-Leere eines Arrays gleichzeitig zur Kompilierzeit und Laufzeit abzusichern. Der Type Guard verfeinert reguläre Arrays zu nicht-leeren Tupeln, wodurch `undefined`-Gefahren bei Array-Zugriffen in Testfixtures ohne Non-Null-Assertions (`!`) ausgeschlossen werden.
snippet.ts
typescript
1
2
3
4
5
6
7
8
9
10
11
12
13
type AssertNonEmptyArray<T> = T extends readonly [infer Head, ...infer Tail] ? T : never;function validateTestFixtures<T extends readonly unknown[]>(fixtures: T & AssertNonEmptyArray<T>): fixtures is T & readonly [unknown, ...unknown[]] {return Array.isArray(fixtures) && fixtures.length > 0;}const mockSuite = [{ id: 1, name: "Fixture A" }] as const;if (validateTestFixtures(mockSuite)) {const primaryTest = mockSuite[0];}
Erklärung
1
type AssertNonEmptyArray<T> = T extends readonly [infer Head, ...infer Tail] ? T : never;
Prüft über Tupel-Mustervergleich, ob der Typ T mindestens ein Element enthält.
2
): fixtures is T & readonly [unknown, ...unknown[]] {
Type Guard, der das Array im Erfolgsfall auf ein garantiert nicht-leeres Tupel verfeinert.
3
const mockSuite = [{ id: 1, name: "Fixture A" }] as const;
Fixiert die Testarray-Struktur als unveränderliches Readonly-Tupel-Literal.