Не всегда массивы содержат данные только одного типа. Иногда нам нужно хранить смешанные значения, например, массив идентификаторов, которые могут быть и числами, и строками. Для этого используются Union Types внутри объявления массива.
Важно правильно использовать скобки: (string | number)[] означает массив, где каждый элемент может быть либо строкой, либо числом. Если забыть скобки и написать string | number[], смысл изменится: это будет либо одна строка, либо массив чисел. Понимание этого нюанса критично для безопасной типизации.
Вас ждут практические задания, где вы научитесь создавать гибкие списки. Вы будете исправлять ошибки типизации и учиться отличать правильный синтаксис объединения от ошибочного.
- Модуль 1: Введение в TypeScript
- Модуль 2: Примитивные типы
- Модуль 3: Специальные типы
- Модуль 4: Массивы
- Типизация массивов (Type[]).
- Типизация массивов (Array).
- Массивы с несколькими типами.
- Readonly массивы.
- Модуль 5: Кортежи (Tuples)
- Модуль 6: Объекты
- Модуль 7: Функции
- Модуль 8: Union типы
- Модуль 9: Литеральные типы
- Модуль 10: Type Aliases
- Модуль 11: Интерфейсы
- Модуль 12: Type Guards и Narrowing
- Модуль 13: Enums
- Модуль 14: Классы
- Модуль 15: Generics — основы
- Модуль 16: Generics — ограничения
- Модуль 17: Utility Types — базовые
- Модуль 18: Utility Types — работа с Union
- Модуль 19: Utility Types — функции
- Модуль 20: Type Assertions
- Модуль 21: Keyof и Typeof операторы
- Модуль 22: Mapped Types
- Модуль 23: Conditional Types
- Модуль 24: Discriminated Unions
- Модуль 25: Модули и типы
- Модуль 26: Declaration Files
- Модуль 27: Типизация асинхронного кода
- Модуль 28: Практические паттерны
1. Синтаксис объединения
В этом задании вам нужно объявить массив, который может содержать элементы двух типов: числа и булевы значения. Для этого используется синтаксис объединения типов (union type) в TypeScript. Дополните фрагмент кода, указав правильный тип для массива и расставив скобки вокруг объединения типов, чтобы код компилировался без ошибок.
let mixedArray: input1S = [1, true, 2, false, 3];
console.log(mixedArray);2. Допустимые элементы
Перед вами список значений, которые могут быть элементами массива с типом `(string | boolean)[]` в TypeScript. Ваша задача — распределить эти значения по двум категориям: «Valid» (допустимые для данного типа массива) и «Invalid» (недопустимые). Обратите внимание, что массив объявлен как содержащий только строки или логические значения, поэтому другие типы данных в него помещать нельзя. Перетащите каждый элемент в соответствующую категорию.
'hello'truefalse'world'1230'typescript'423. Забытые скобки
В этом фрагменте кода TypeScript допущена ошибка в объявлении типа переменной. Переменная должна хранить массив, элементы которого могут быть строками или числами, но из-за неправильной расстановки скобок тип интерпретируется иначе. Исправьте объявление типа, чтобы массив мог содержать элементы обоих типов.
let data: string | number[] = ["hello", 42];console.log(data[0]);4. Типизация смешанного списка
В этом задании вам нужно правильно типизировать параметр функции, который должен принимать массив, содержащий как строковые, так и числовые идентификаторы. В коде есть два пропуска: первый — для типа параметра, второй — для примера массива, передаваемого в функцию. Выберите из выпадающих списков подходящие варианты, чтобы код был корректным с точки зрения TypeScript.
function processIds(ids: input1S) {
console.log(ids.length);
}
processIds(input2S);5. Структура типа
В данном задании вам нужно разметить элементы объявления массива с несколькими типами в TypeScript. Обратите внимание на выражение `let arr: (boolean | string)[]`. Выделите следующие элементы: типы данных внутри круглых скобок, разделитель union (объединения типов) и скобки массива. Для каждого выделенного фрагмента выберите соответствующий тип из предложенных вариантов.
let arr: ({{boolean~|~t1}} {{|~|~t2}} {{string~|~t3}}){{[]~|~t4}};6. Проверка push
Проанализируйте приведённый фрагмент кода на TypeScript. Массив `items` явно типизирован как `(number | string)[]`. Определите, что произойдёт при попытке добавить в него объект с помощью метода `push`. Выберите единственный верный вариант, описывающий результат выполнения этого кода.
let items: (number | string)[] = [1, "apple"];
items.push(3);
items.push("banana");
// Попытка добавить объект
items.push({ key: "value" });7. Конструктор сложного массива
Из предложенных строк соберите корректное объявление переменной на TypeScript. Переменная data должна быть массивом, который может содержать элементы типов User и Admin (объединение типов), и инициализирована пустым массивом. Одна из строк является лишней и не должна входить в решение. Порядок типов User и Admin в объединении не имеет значения, но остальные части должны следовать строгому синтаксису TypeScript.
let data: (User | Admin)[] = [];let data: (User & Admin)[] = [];