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 const
для переменных;
переменные не могут быть переназначены ни на что другое.
readonly
для атрибутов;
используется для псевдонима, вы можете изменить атрибуты.
Простой пример 1:
Простой пример 2:
readonly гарантирует, что «Я» не могу изменить атрибут, но когда вы передаете этот атрибут другим пользователям, у которых нет этой гарантии (учитывая причины совместимости типов), они могут изменить его. Конечно, если iMutateFoo явно заявляет, что их параметры не могут быть изменены, компилятор выдаст предупреждение об ошибке:
Last updated
Was this helpful?