typescript / expert
Snippet
Nominale Untertypisierung mit Symbol-basierter privater Schlüssel-Kapselung
Durch die Kombination von `unique symbol`-Schlüsseln mit Klassenerbung setzt TypeScript eine nominal-ähnliche Kapselung von Objektzuständen durch. Dynamische Eigenschaften, die mit einem Unique Symbol definiert wurden, sind von externen Klassen nicht ohne Zugriff auf genau diese Symbolinstanz auslesbar.
snippet.ts
typescript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const SecretKey: unique symbol = Symbol("SecretKey");export abstract class SecureEntity {private readonly [SecretKey]: string;constructor(secret: string) {this[SecretKey] = secret;}protected getSecret(this: SecureEntity): string {return this[SecretKey];}}export class UserSession extends SecureEntity {public validateToken(input: string): boolean {return this.getSecret() === input;}}
Erklärung
1
const SecretKey: unique symbol = Symbol("SecretKey");
Deklariert ein Unique Symbol, das im Typsystem als eindeutiger Schlüssel-Typ registriert ist.
2
private readonly [SecretKey]: string;
Definiert eine private, durch ein Symbol geschützte Eigenschaft innerhalb der Basisklasse.
3
protected getSecret(this: SecureEntity): string
Gewährt gesteuerten Zugriff für Subklassen und schränkt den Ausführungskontext über ein explizites 'this'-Typing ein.