Освоение свойств объектов, доступных только для чтения, в TypeScript: подробное руководство

В TypeScript свойства объекта можно сделать доступными только для чтения, чтобы предотвратить их изменение после первоначального назначения. Эта функция обеспечивает целостность и неизменяемость данных. В этой статье мы рассмотрим различные методы определения свойств объектов, доступных только для чтения, в TypeScript, а также приведем примеры кода.

Метод 1: модификатор «только для чтения».
Самый простой способ сделать свойства объекта доступными только для чтения — использовать модификатор readonly. Вот пример:

interface Person {
  readonly name: string;
  age: number;
}
const person: Person = {
  name: "John",
  age: 30,
};
person.name = "Jane"; // Error: Cannot assign to 'name' because it is a read-only property
person.age = 31; // No error

Метод 2: Object.freeze()
Метод Object.freeze()можно использовать, чтобы сделать весь объект и его свойства доступными только для чтения. Вот пример:

const car = {
  make: "Toyota",
  model: "Camry",
};
Object.freeze(car);
car.make = "Honda"; // Error: Cannot assign to 'make' because it is a read-only property
car.model = "Accord"; // Error: Cannot assign to 'model' because it is a read-only property

Метод 3: Тип утилиты «Только для чтения»
TypeScript предоставляет тип утилиты под названием Readonly<T>, который рекурсивно делает все свойства объекта и его вложенных объектов доступными только для чтения. Вот пример:

interface Point {
  x: number;
  y: number;
}
const point: Readonly<Point> = {
  x: 10,
  y: 20,
};
point.x = 5; // Error: Cannot assign to 'x' because it is a read-only property
point.y = 15; // Error: Cannot assign to 'y' because it is a read-only property

Метод 4: Тип утилиты ReadonlyArray
Если у вас есть массив, который вы хотите сделать доступным только для чтения, вы можете использовать тип утилиты ReadonlyArray<T>. Вот пример:

const numbers: ReadonlyArray<number> = [1, 2, 3, 4, 5];
numbers.push(6); // Error: Property 'push' does not exist on type 'readonly number[]'
numbers[0] = 10; // Error: Index signature in type 'readonly number[]' only permits reading

В этой статье мы рассмотрели несколько способов сделать свойства объекта доступными только для чтения в TypeScript. Используя модификатор readonly, Object.freeze()и служебные типы, такие как Readonly<T>и ReadonlyArray<T>, вы можете обеспечить неизменность и защитить ваши данные от непреднамеренных изменений. Понимание этих методов поможет вам писать более надежный и удобный в обслуживании код TypeScript.