typescript / expert
Snippet
Typsichere Zugriffskontrolle auf privaten Zustand mittels WeakMap-Closures
Dieses Snippet bietet eine starke Objekt-Kapselung in TypeScript durch Kombination von modulweiten WeakMaps mit eingefrorenen Interfaces. Es verhindert die externe Laufzeit-Inspektion oder Zustandsmanipulation bei gleichzeitiger strikter statischer Typisierung und sauberer Garbage-Collection.
snippet.ts
typescript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
interface UserPrivileges {readonly roles: string[];}const privateStore = new WeakMap<object, UserPrivileges>();export class AccountGuard {constructor(roles: string[]) {privateStore.set(this, { roles: Object.freeze([...roles]) });}public hasRole(role: string): boolean {const state = privateStore.get(this);return state ? state.roles.includes(role) : false;}}
Erklärung
1
interface UserPrivileges { readonly roles: string[]; }
Definiert einen unveränderlichen Vertrag für interne Instanzdaten.
2
const privateStore = new WeakMap<object, UserPrivileges>();
Erstellt einen WeakMap-Speicher, auf den außerhalb des Moduls nicht zugegriffen werden kann.
3
privateStore.set(this, { roles: Object.freeze([...roles]) });
Verknüpft privaten Instanzzustand mit tiefer Laufzeit-Unveränderlichkeit.
4
public hasRole(role: string): boolean {
Stellt eine kontrollierte, typsichere öffentliche Methode für interne Prüfungen bereit.
5
const state = privateStore.get(this);
Ruf den privaten Zustand ab, der strikt an die aktuelle Instanz gebunden ist.