Поиск по сайту
Ctrl + K
Вопросы по TS

Как сделать массивы только для чтения в TypeScript?

В TypeScript можно создавать массивы, которые можно только читать, но не редактировать. Это может быть полезно, когда вы хотите гарантировать, что данные не будут изменены в определённой части вашего кода. Для создания массивов только для чтения используются утилиты типа ReadonlyArray<T> и ключевое слово as const.

Использование ReadonlyArray<T>

TypeScript предоставляет специальный тип ReadonlyArray<T>, который можно использовать для создания массивов, элементы которых можно только читать. Например:

const numbers: ReadonlyArray<number> = [1, 2, 3, 4, 5];

// Это вызовет ошибку компиляции, так как мы не можем менять значения массива
numbers[0] = 10; // Ошибка

В этом примере, если вы попытаетесь присвоить новое значение любому элементу массива numbers, TypeScript выдаст ошибку. Таким образом, массив становится «только для чтения».

Использование as const

Другой способ создания неизменяемых массивов — это использовать утверждение as const. При использовании этого подхода TypeScript определяет массив как константу, что делает его элементы и сам массив неизменяемыми.

const colors = ['red', 'green', 'blue'] as const;

// Это также вызовет ошибку компиляции
colors[0] = 'yellow'; // Ошибка

В этом примере массив colors считается неизменяемым, и вы не сможете изменить его элементы.

Что выбрать?

Если вы хотите создать массив, который будет ссылаться на изменяемые элементы, но весь массив должен быть неизменяемым, то используйте ReadonlyArray<T>. Если же у вас есть фиксированный набор значений, которые не должны изменяться, используйте as const.

Пример кода с обеими методами

Вот как могут выглядеть оба подхода вместе:

// С использованием ReadonlyArray
const fruits: ReadonlyArray<string> = ['apple', 'banana', 'cherry'];

// С использованием as const
const vegetables = ['carrot', 'potato', 'tomato'] as const;

// Проверим, вызываем ли мы ошибки
// fruits[1] = 'orange'; // Ошибка компиляции
// vegetables[2] = 'cucumber'; // Ошибка компиляции

Заключение

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