#typescript
В чистом JavaScript нельзя запретить изменение объектов и массивов без использования библиотек или просадки производительности.
В TypeScript для этого существует:
➡️ ключевое слово
readonly в классе, интерфейсе или типе, которое запрещает изменение указанного свойства.➡️
Readonly<Type> возвращает тип, у которого все свойства будут readonly➡️
ReadonlyArray<Type> определяет типа массива, у которого запрещено изменение элементов➡️
as const делает объект или массив неизменяемымДанный синтаксис позволяет контролировать бизнес логику на этапе компиляции и не создает ухудшение перфоманса в run-time.
Однока следует помнить, что существует проблема: "Interface with readonly property is assignable to interface with mutable property" Пример:
interface MutableValue<T> { value: T; }interface ImmutableValue<T> { readonly value: T; }let i: ImmutableValue<string> = { value: "hi" };i.value = "Excellent, I can't change it"; // compile-time errorlet m: MutableValue<string> = i;m.value = "Oh dear, I can change it";Данная проблема известна уже 4 года и ее не планирую решать.