Среди многих функций TypeScript — типы массивов и кортежей, доступные только для чтения, которые позволяют обеспечить неизменность ваших коллекций, гарантируя, что они не могут быть изменены после создания.
Типы массивов только для чтения
Что такое тип массива только для чтения?
Тип массива только для чтения — это версия стандартного типа массива, которая предотвращает изменение его элементов. Это означает, что после того, как вы создали массив только для чтения, вы не можете добавлять, удалять или изменять его элементы.
В TypeScript вы можете создать тип массива только для чтения, используя служебный тип ReadonlyArray<T>
или модификатор readonly
со стандартным типом массива.
Использование типа утилиты ReadonlyArray<T>
:
const numbers: ReadonlyArray<number> = [1, 2, 3, 4, 5];
Использование модификатора readonly
со стандартным типом массива:
const numbers: readonly number[] = [1, 2, 3, 4, 5];
В обоих случаях вы получите массив чисел, доступный только для чтения.
Преимущества использования типов массивов только для чтения
Есть несколько преимуществ использования типов массивов только для чтения в TypeScript:
- Неизменяемость. Обеспечивая неизменяемость ваших массивов, вы можете предотвратить непреднамеренные модификации, делая свой код более предсказуемым и понятным.
- Инкапсуляция. Типы массивов, доступные только для чтения, помогают создать четкую границу между компонентами или функциями, отвечающими за изменение массива, и теми, которые должны только читать из него.
- Повышенная безопасность типов. Массивы только для чтения обеспечивают лучшую безопасность типов, предотвращая случайные мутации.
Ограничения типов массивов только для чтения
- Совместимость: поскольку массивы только для чтения являются функцией, специфичной для TypeScript, они могут плохо поддерживаться некоторыми библиотеками или утилитами JavaScript.
Типы кортежей только для чтения
Что такое тип кортежа только для чтения?
Тип кортежа только для чтения — это версия стандартного типа кортежа, которая предотвращает изменение его элементов. Как и массивы только для чтения, кортежи только для чтения гарантируют, что их элементы не могут быть изменены после создания.
В TypeScript вы можете создать тип кортежа только для чтения, используя модификатор readonly
со стандартным типом кортежа.
const point: readonly [number, number] = [1, 2];
В этом примере у вас есть доступный только для чтения кортеж, представляющий точку с двумя числовыми элементами.
Преимущества использования типов кортежей только для чтения
Существует несколько преимуществ использования типов кортежей только для чтения в TypeScript:
- Неизменяемость. Подобно массивам только для чтения, кортежи только для чтения обеспечивают неизменность, делая код более предсказуемым и понятным.
- Повышенная безопасность типов: кортежи, доступные только для чтения, обеспечивают лучшую безопасность типов, предотвращая случайные мутации.
Расширенное использование
Сопоставленные типы с массивами и кортежами только для чтения
Сопоставленные типы в TypeScript — это мощная функция, позволяющая создавать новые типы путем преобразования свойств существующего типа. Сопоставленные типы можно использовать для создания версий пользовательских массивов или кортежей, доступных только для чтения.
Например, рассмотрим следующий пользовательский тип кортежа Person
:
type Person = [string, number, string];
Вы можете создать версию этого типа кортежа только для чтения, используя сопоставленный тип:
type ReadonlyPerson = { readonly [K in keyof Person]: Person[K] }; const person: ReadonlyPerson = ['Alice', 30, 'Developer'];
Условные типы с массивами и кортежами только для чтения
Условные типы в TypeScript позволяют создавать новые типы на основе условий, применяемых к существующим типам. Вы можете использовать условные типы для создания доступных только для чтения версий пользовательских массивов или типов кортежей, которые зависят от других типов. Например:
type DeepReadonlyArray<T> = T extends Array<infer U> ? ReadonlyArray<DeepReadonlyArray<U>> : T;
Этот псевдоним типа создает глубоко доступный только для чтения тип массива, который гарантирует, что все вложенные массивы также доступны только для чтения. Вы можете использовать псевдоним этого типа для создания массивов и кортежей только для чтения:
const matrix: DeepReadonlyArray<[number, number][]> = [ [1, 2], [3, 4], [5, 6], ]; // All nested arrays are now read-only.
Заключение
В этой статье мы рассмотрели доступные только для чтения типы массивов и кортежей в TypeScript, обсудив их назначение, использование, преимущества и ограничения. Надеюсь, эта статья будет вам полезна.
Спасибо за прочтение. Если вам понравилась эта статья, поддержите меня, став участником Medium.
Повышение уровня кодирования
Спасибо, что являетесь частью нашего сообщества! Перед тем, как ты уйдешь:
- 👏 Хлопайте за историю и подписывайтесь на автора 👉
- 📰 Смотрите больше контента в публикации Level Up Coding
- 💰 Бесплатный курс собеседования по программированию ⇒ Просмотреть курс
- 🔔 Подписывайтесь на нас: Twitter | ЛинкедИн | "Новостная рассылка"
🚀👉 Присоединяйтесь к коллективу талантов Level Up и найдите прекрасную работу