Перейти к основному содержимому
Модуль 1 · Урок 2 из 22/14 в курсе~10 min
Уроки модуля (2/2)

Массивы и кортежи

В JavaScript массивы могут содержать элементы любого типа и могут динамически увеличиваться или уменьшаться. TypeScript добавляет статическую проверку типов, чтобы гарантировать, что коллекции остаются однородными или соблюдают фиксированную структуру типов.


Массивы (однородные коллекции)

В TypeScript существует два эквивалентных способа определения типа массива, содержащего элементы одного типа:

  1. Используя тип элемента, за которым следуют квадратные скобки ([]):

    TS
    const numbers: number[] = [1, 2, 3];
    const strings: string[] = ['a', 'b', 'c'];
  2. Использование универсального типа Array<T>:

    TS
    const numbers: Array<number> = [1, 2, 3];

Оба синтаксиса полностью допустимы, но первый (type[]) является традиционным и наиболее распространенным. Если вы попытаетесь вставить недопустимое значение (например, numbers.push("hello") в массив number[]), TypeScript выдаст ошибку во время компиляции.


Кортежи (массивы фиксированной длины)

Кортеж – это особый тип массива, который имеет фиксированное количество элементов, при этом каждый элемент имеет предопределенный конкретный тип в зависимости от его положения.

Например, чтобы сохранить ответ HTTP, состоящий из кода состояния (числа) и сообщения (строки):

TS
const response: [number, string] = [200, 'OK'];

В этом случае:

– Первый элемент (response[0]) должен быть number. – Второй элемент (response[1]) должен быть string. — Массив должен быть инициализирован ровно двумя элементами.


Кортежи только для чтения (readonly)

Важная деталь кортежей в TypeScript заключается в том, что во время выполнения они представляют собой обычные массивы JavaScript. Это означает, что изменяющие методы, такие как .push() или .pop(), технически доступны и могут изменить длину кортежа, частично минуя проверки типов.

Чтобы предотвратить такое поведение и обеспечить истинную неизменность, мы можем использовать модификатор readonly:

TS
const point: readonly [number, number] = [10, 20];
// point.push(30); // Compile-time error!

Попробуйте сами

Упражнение 1. Массив чисел

Упражнение#ts.m1.l2.e1
Попыток: 0Загрузка…

Объявите массив с именем Scores, который содержит только числа и инициализируется значениями 90, 85 и 95. Используйте явную аннотацию типа для массива. Не используйте любой тип.

Загрузка редактора…
Показать подсказку

Используйте синтаксические константы: число[] = ... или Array<number>.

Решение доступно после 3 попыток

Упражнение 2. Кортеж 3D-координат

Упражнение#ts.m1.l2.e2
Попыток: 0Загрузка…

Объявите кортеж с именем point, который представляет трехмерную координату (три числа для X, Y, Z) и инициализируется значениями 10, 20, 30. Используйте явную аннотацию типа.

Загрузка редактора…
Показать подсказку

Тип кортежа должен быть [число, число, число].

Решение доступно после 3 попыток

Упражнение 3. Кортеж информации о местоположении

Упражнение#ts.m1.l2.e3
Попыток: 0Загрузка…

Объявите кортеж с именем locationInfo, который представляет географическую координату с ее именем. Он должен содержать: широту (число), долготу (число) и название города (строка). Инициализируйте его значениями 41.9028, 12.4964 и «Рим».

Загрузка редактора…
Показать подсказку

Используйте синтаксис, чтобы определить кортеж из трех элементов: [число, число, строка].

Решение доступно после 3 попыток

Упражнение 4. Кортеж записей журнала

Упражнение#ts.m1.l2.e4
Попыток: 0Загрузка…

Объявите кортеж с именем logEntry, представляющий строку журнала. Он должен содержать по порядку: метку времени (число), уровень серьезности (строка) и сообщение об ошибке (строка). Инициализируйте его с помощью отметки времени 1716300000, уровня «INFO» и сообщения «Приложение запущено».

Загрузка редактора…
Показать подсказку

Используйте синтаксис, чтобы определить кортеж из трех элементов: [число, строка, строка] и присвойте указанные значения.

Решение доступно после 3 попыток