Доки по разработке
This project is maintained by teniryte
Принципы
as const делает объект и его вложенные литералы неизменяемыми на уровне типов.deepFreeze замораживает объект в runtime, предотвращая мутации.Immutable<T> строит глубокую readonly-версию через рекурсию по ключам.Пример
const bill = {
name: 'Bill',
profile: { level: 6 },
scores: [1, 2, 3],
} as const;
// bill.name = 'John'; // Ошибка
function deepFreeze<T>(obj: T): Readonly<T> {
for (const name of Object.getOwnPropertyNames(obj)) {
const value = (obj as any)[name];
if (value && typeof value === 'object') {
deepFreeze(value);
}
}
return Object.freeze(obj);
}
const frozen = deepFreeze({
name: 'Bill',
profile: { level: 1 },
scores: [90, 65, 80],
} as const);
Практика
as const) и runtime (deepFreeze) неизменяемость для максимальной защиты.type Immutable<T> для декларативного описания глубокой неизменяемости.deepFreeze: для больших структур используйте ленивые проверки или специализированные библиотеки.