Неизменяемые свойства в классах TypeScript: понимание модификатора «только для чтения»

Только для чтения в классах TypeScript: изучение неизменяемых свойств

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

  1. Свойства, доступные только для чтения, в конструкторах классов.
    Одним из распространенных способов использования модификатора «только для чтения» является присвоение значений свойствам, доступным только для чтения, в конструкторе класса. После присвоения значения его нельзя изменить, что обеспечивает неизменяемость.
class Person {
  readonly name: string;
  constructor(name: string) {
    this.name = name;
  }
}
const person = new Person("John");
console.log(person.name); // Output: John
person.name = "Mike"; // Error: Cannot assign to 'name' because it is a read-only property
  1. Свойства, доступные только для чтения, с инициализаторами.
    Другой подход заключается в использовании инициализаторов свойств при объявлении свойств, доступных только для чтения. Это позволяет присваивать значение непосредственно при объявлении свойства без необходимости использования конструктора.
class Circle {
  readonly radius = 5;
}
const circle = new Circle();
console.log(circle.radius); // Output: 5
circle.radius = 10; // Error: Cannot assign to 'radius' because it is a read-only property
  1. Модификаторы доступа только для чтения:
    В TypeScript вы также можете комбинировать модификатор «только для чтения» с модификаторами доступа, такими как «публичный», «частный» или «защищенный». Такой подход ограничивает как изменение, так и доступ к свойству.
class Car {
  private readonly brand: string;
  constructor(brand: string) {
    this.brand = brand;
  }
  getBrand(): string {
    return this.brand;
  }
}
const car = new Car("Toyota");
console.log(car.getBrand()); // Output: Toyota
console.log(car.brand); // Error: Property 'brand' is private and only accessible within class 'Car'
car.brand = "Ford"; // Error: Cannot assign to 'brand' because it is a read-only property
  1. Массивы и кортежи только для чтения.
    Модификатор «только для чтения» также можно использовать с массивами и кортежами для обеспечения неизменяемости их элементов.
const numbers: readonly number[] = [1, 2, 3];
console.log(numbers[0]); // Output: 1
numbers[0] = 10; // Error: Index signature in type 'readonly number[]' only permits reading
const tuple: readonly [string, number] = ["apple", 5];
console.log(tuple[0]); // Output: apple
tuple[0] = "banana"; // Error: Index signature in type 'readonly [string, number]' only permits reading

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