typescript / intermediate
Snippet
Durchsetzung von Testinvarianten mit Zusicherungssignatur-Funktionen
Zusicherungssignaturen verwenden die Syntax 'asserts condition', um dem TypeScript-Compiler mitzuteilen, dass ein Funktionsaufruf eine Ausnahme auslöst, wenn eine Bedingung nicht erfüllt ist.
snippet.ts
typescript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class AssertionError extends Error {constructor(message: string) {super(message);this.name = "AssertionError";}}function assertIsDefined<T>(val: T, name: string): asserts val is NonNullable<T> {if (val === null || val === undefined) {throw new AssertionError(`Expected '${name}' to be defined, but received ${val}`);}}function verifyUser(user: { id?: string } | null) {assertIsDefined(user, "user");assertIsDefined(user.id, "user.id");const userId: string = user.id;}
Erklärung
1
function assertIsDefined<T>(val: T, name: string): asserts val is NonNullable<T> {
Deklariert eine Zusicherungsfunktion, die bei Erfolg die Typen im Aufrufer-Bereich verfeinert.
2
throw new AssertionError(`Expected '${name}' to be defined, but received ${val}`);
Löst einen expliziten Zusicherungsfehler aus, wenn die Validierung fehlschlägt.
3
const userId: string = user.id;
TypeScript verfeinert 'user.id' sicher von string | undefined zu string ohne Typumwandlung.