typescript / intermediate
Snippet
Defensive Copying and Property Sealing for Secure State Objects
Defensive copying disconnects the output from parameter reference mutations, while Object.preventExtensions and Object.freeze enforce runtime immutability invariants.
snippet.ts
typescript
1
2
3
4
5
6
7
8
9
10
11
12
13
interface AppConfig {readonly endpoint: string;readonly retries: number;}function createImmutableConfig(input: AppConfig): Readonly<AppConfig> {const copy: AppConfig = {endpoint: input.endpoint,retries: input.retries};Object.preventExtensions(copy);return Object.freeze(copy);}
Breakdown
1
function createImmutableConfig(input: AppConfig): Readonly<AppConfig> {
Accepts configuration object and returns a deeply immutable, type-safe read-only version.
2
const copy: AppConfig = { endpoint: input.endpoint, retries: input.retries };
Performs defensive copying of property primitives to decouple from external input objects.
3
Object.preventExtensions(copy);
Prevents new properties from being added to the copied state object at runtime.
4
return Object.freeze(copy);
Locks existing properties against deletion or mutation, guaranteeing security invariants.