Перейти до основного вмісту
Модуль 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.
  • Масив має бути ініціалізований рівно 2 елементами.

Кортежі лише для читання (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. Використовуйте явну анотацію типу для масиву. Не використовуйте жодного типу.

Завантаження редактора…
Показати підказку

Використовуйте синтаксис const scores: число[] = ... або масив&lt;число&gt;.

Рішення доступне після 3 спроб

Вправа 2: Тривимірний кортеж координат

вправи#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 спроб