Уроки модуля (2/2)
Массивы и кортежи
В JavaScript массивы могут содержать элементы любого типа и могут динамически увеличиваться или уменьшаться. TypeScript добавляет статическую проверку типов, чтобы гарантировать, что коллекции остаются однородными или соблюдают фиксированную структуру типов.
Массивы (однородные коллекции)
В TypeScript существует два эквивалентных способа определения типа массива, содержащего элементы одного типа:
-
Используя тип элемента, за которым следуют квадратные скобки (
[]):TSconst numbers: number[] = [1, 2, 3]; const strings: string[] = ['a', 'b', 'c']; -
Использование универсального типа
Array<T>:TSconst numbers: Array<number> = [1, 2, 3];
Оба синтаксиса полностью допустимы, но первый (type[]) является традиционным и наиболее распространенным. Если вы попытаетесь вставить недопустимое значение (например, numbers.push("hello") в массив number[]), TypeScript выдаст ошибку во время компиляции.
Кортежи (массивы фиксированной длины)
Кортеж – это особый тип массива, который имеет фиксированное количество элементов, при этом каждый элемент имеет предопределенный конкретный тип в зависимости от его положения.
Например, чтобы сохранить ответ HTTP, состоящий из кода состояния (числа) и сообщения (строки):
const response: [number, string] = [200, 'OK'];В этом случае:
– Первый элемент (response[0]) должен быть number.
– Второй элемент (response[1]) должен быть string.
— Массив должен быть инициализирован ровно двумя элементами.
Кортежи только для чтения (readonly)
Важная деталь кортежей в TypeScript заключается в том, что во время выполнения они представляют собой обычные массивы JavaScript. Это означает, что изменяющие методы, такие как .push() или .pop(), технически доступны и могут изменить длину кортежа, частично минуя проверки типов.
Чтобы предотвратить такое поведение и обеспечить истинную неизменность, мы можем использовать модификатор readonly:
const point: readonly [number, number] = [10, 20];
// point.push(30); // Compile-time error!Попробуйте сами
Упражнение 1. Массив чисел
Объявите массив с именем Scores, который содержит только числа и инициализируется значениями 90, 85 и 95. Используйте явную аннотацию типа для массива. Не используйте любой тип.
Показать подсказку
Используйте синтаксические константы: число[] = ... или Array<number>.
Решение доступно после 3 попыток
Упражнение 2. Кортеж 3D-координат
Объявите кортеж с именем point, который представляет трехмерную координату (три числа для X, Y, Z) и инициализируется значениями 10, 20, 30. Используйте явную аннотацию типа.
Показать подсказку
Тип кортежа должен быть [число, число, число].
Решение доступно после 3 попыток
Упражнение 3. Кортеж информации о местоположении
Объявите кортеж с именем locationInfo, который представляет географическую координату с ее именем. Он должен содержать: широту (число), долготу (число) и название города (строка). Инициализируйте его значениями 41.9028, 12.4964 и «Рим».
Показать подсказку
Используйте синтаксис, чтобы определить кортеж из трех элементов: [число, число, строка].
Решение доступно после 3 попыток
Упражнение 4. Кортеж записей журнала
Объявите кортеж с именем logEntry, представляющий строку журнала. Он должен содержать по порядку: метку времени (число), уровень серьезности (строка) и сообщение об ошибке (строка). Инициализируйте его с помощью отметки времени 1716300000, уровня «INFO» и сообщения «Приложение запущено».
Показать подсказку
Используйте синтаксис, чтобы определить кортеж из трех элементов: [число, строка, строка] и присвойте указанные значения.
Решение доступно после 3 попыток