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

“typescript readonly” — это английская фраза, обозначающая функцию языка программирования TypeScript. В TypeScript ключевое слово readonlyиспользуется для объявления того, что свойство или переменную не следует изменять после присвоения значения. Это обеспечивает своего рода неизменяемость и помогает обеспечить целостность данных в вашем коде.

Вот несколько методов, связанных с использованием readonlyв TypeScript:

  1. Свойства только для чтения: модификатор readonlyможно использовать для объявления свойств класса, которые можно установить только во время инициализации или внутри конструктора класса. После назначения эти свойства нельзя изменить.

Пример:

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. Массивы только для чтения: TypeScript предоставляет служебный тип под названием ReadonlyArray, который гарантирует, что массив не может быть изменен после его инициализации. Это предотвращает добавление, удаление или переназначение элементов.

Пример:

const numbers: ReadonlyArray<number> = [1, 2, 3];
console.log(numbers[0]); // Output: 1
numbers.push(4); // Error: Property 'push' does not exist on type 'readonly number[]'.
numbers[0] = 5; // Error: Index signature in type 'readonly number[]' only permits reading.
  1. Параметры только для чтения. Вы можете пометить параметры функции как только для чтения, чтобы указать, что функция не должна изменять их значения.

Пример:

function printName(name: readonly string[]) {
  console.log(name.join(" "));
}
const names: string[] = ["John", "Doe"];
printName(names); // Output: John Doe
names.push("Smith"); // Error: Property 'push' does not exist on type 'readonly string[]'.

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