readonly

Система типов TypeScript позволяет помечать атрибуты только для чтения(readonly) в интерфейсе. Это позволяет вам работать более безопасно (непредсказуемые изменения ужасны):

function foo(config: { readonly bar: number, readonly bas: number }) {
  // ..
}

const config = { bar: 123, bas: 123 };
foo(config);

// Теперь вы можете убедиться, что `config` не может быть изменен

Конечно, вы также можете использовать readonly в interface и type:

type Foo = {
  readonly bar: number;
  readonly bas: number;
};

// Инициализация
const foo: Foo = { bar: 123, bas: 456 };

// Не может быть изменено
foo.bar = 456; // Error: foo.bar aтрибут только для чтения

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

Readonly

Существует тип Readonly, который принимает универсальный T, чтобы пометить все его свойства readonly:

Другие варианты использования

ReactJS

ReactJS - это библиотека, которая любит использовать неизменные данные. Вы можете пометить свои props и state как неизменные данные:

Однако вам не нужно этого делать. Файл объявлений React помечает их как readonly (путем передачи общих параметров во внутреннюю оболочку, чтобы пометить каждое свойство как readonly, как показано в примере выше),

Абсолютно неизменный

Вы даже можете пометить подпись индекса как доступную только для чтения:

Если вы хотите использовать собственные массивы JavaScript согласованным образом, вы можете использовать интерфейс `ReadonlyArray T, предоставляемый TypeScript:

Автоматический вывод

В некоторых случаях компилятор может выводить некоторые свойства как readonly. Например, в классе, если у вас есть свойство только с getter, но без setter, оно может быть выведено как доступное только для чтения:

Отличается от const

const

  • для переменных;

  • переменные не могут быть переназначены ни на что другое.

readonly

  • для атрибутов;

  • используется для псевдонима, вы можете изменить атрибуты.

Простой пример 1:

Простой пример 2:

readonly гарантирует, что «Я» не могу изменить атрибут, но когда вы передаете этот атрибут другим пользователям, у которых нет этой гарантии (учитывая причины совместимости типов), они могут изменить его. Конечно, если iMutateFoo явно заявляет, что их параметры не могут быть изменены, компилятор выдаст предупреждение об ошибке:

Last updated

Was this helpful?