javascript / expert
Snippet
Nominale Typisierung durch Branded Types
TypeScript verwendet strukturelle Typisierung, was bedeutet, dass jeder String dort übergeben werden kann, wo ein anderer String erwartet wird. Branded Types simulieren nominale Typisierung und verhindern Logikfehler wie das versehentliche Vertauschen einer User-ID mit einer Order-ID, was entscheidend für die Sicherheit und Datenintegrität in großen Anwendungen ist.
snippet.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
type Brand<K, T> = K & { __brand: T };type UserId = Brand<string, 'User'>;type OrderId = Brand<string, 'Order'>;function processOrder(userId: UserId, orderId: OrderId) {// Business logic}const myUser = 'abc' as UserId;const myOrder = 'xyz' as OrderId;processOrder(myUser, myOrder); // Success// processOrder(myOrder, myUser); // TypeScript Error!
nextjs
Erklärung
1
type Brand<K, T> = K & { __brand: T };
Erzeugt einen Intersection-Typ, der einem primitiven Typ eine eindeutige Eigenschaft hinzufügt, um ihn zu unterscheiden.
2
type UserId = Brand<string, 'User'>;
Definiert einen eindeutigen Typ für User-IDs, der technisch ein String ist, aber inkompatibel mit anderen 'gebrandeten' Strings.
3
processOrder(myOrder, myUser);
Der Compiler blockiert diesen Aufruf, da die Brand-Tags nicht übereinstimmen, obwohl beide Strings sind.