Доки по разработке
This project is maintained by teniryte
Object.freeze и ограниченияПринципы
Object.freeze выполняет поверхностную заморозку: нельзя добавлять/изменять свойства на верхнем уровне.push, splice), но вложенные объекты остаются изменяемыми.Readonly<T> из TypeScript отражает поверхностную неизменяемость; для глубокой требуется дополнительная обработка.Пример
const scores = Object.freeze([1, 2, 3, 4, 5]);
// scores.push(5); // Ошибка в runtime
const bill = Object.freeze({
name: 'Bill',
age: 30,
profile: { level: 1 },
});
// bill.name = 'John'; // Ошибка
bill.profile.level = 5; // Разрешено: вложенный объект не заморожен
Практика
Object.freeze с рекурсией или используйте специализированные утилиты (deepFreeze, readonly).as const на литералах, чтобы получить типовую неизменяемость ещё до runtime.