Обычные кортежи в TypeScript имеют фиксированную длину. Однако, используя Rest элементы (синтаксис ...type[]), можно создавать кортежи с переменным количеством элементов в определенной позиции.
Это похоже на работу с аргументами функций. Rest-элемент может находиться в начале, середине или конце кортежа.
Пример: type NameAndScores = [string, ...number[]]; — первым элементом всегда идет строка, а за ней может следовать любое количество чисел (или ни одного).
Этот интерактивный урок поможет разобраться, как типизировать массивы смешанной длины и как правильно извлекать из них данные.
- Модуль 1: Введение в TypeScript
- Модуль 2: Примитивные типы
- Модуль 3: Специальные типы
- Модуль 4: Массивы
- Модуль 5: Кортежи (Tuples)
- Объявление кортежей.
- Опциональные элементы в кортежах.
- Rest элементы в кортежах.
- Readonly кортежи.
- Модуль 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. Синтаксис Rest элемента
В этом задании вам нужно дополнить объявление кортежа с использованием rest-элемента. Rest-элемент позволяет указать, что после определённых типизированных элементов может следовать переменное количество элементов одного типа. В данном случае кортеж должен начинаться с числа, а за ним может быть любое количество строк. Заполните пропуски в коде, чтобы он корректно компилировался и соответствовал описанию.
let myTuple: [number, input1S];
let arr: string[] = ["a", "b", "c"];
myTuple = [1, input2S];2. Валидность присваивания
В данном задании представлен код на TypeScript, в котором объявлен кортеж с типом [boolean, ...string[]]. Затем этому кортежу присваивается массив с элементами разных типов. Проанализируйте код и определите, будет ли ошибка компиляции, и если да, то из-за чего.
let myTuple: [boolean, ...string[]];
myTuple = [true, "hello", 123];3. Сборка типа с Rest
Из предложенных строк соберите корректное определение типа кортежа на TypeScript, где rest элемент находится в середине (например, [string, ...boolean[], number]). Используйте только необходимые строки, игнорируя лишние. В решении должен получиться тип, описывающий кортеж, где первый элемент — строка, затем произвольное количество булевых значений, и последний элемент — число.
type MyTuple = [string,...boolean[],number];type MyTuple = [string, number, ...boolean[]];...boolean;let x: MyTuple = ['hello', true, 42];4. Ошибка деструктуризации
В этом фрагменте TypeScript-кода допущена ошибка при деструктуризации кортежа с rest-элементом. Переменной присваивается неверный тип, что приводит к ошибке компиляции. Исправьте аннотацию типа в деструктуризации, чтобы код стал корректным и соответствовал исходному кортежу.
let tuple: [string, number, ...boolean[]] = ["hello", 42, true, false];let [first, second, ...rest]: [string, boolean, ...boolean[]] = tuple;console.log(first, second, rest);5. Найти Rest элемент
В приведённом определении типа TypeScript найдите и разметьте все элементы, указав для каждого выделенного фрагмента, является ли он ключевым словом, именем типа, знаком препинания, типом данных или rest-оператором. Обратите внимание на синтаксис кортежей и rest-оператор, который позволяет указывать переменное количество элементов.
{{type~|~t1}} {{MyTuple~|~t2}} {{=~|~t3}} {{[~|~t4}}{{string~|~t5}}{{ , ~|~t6}}{{number~|~t7}}{{ , ~|~t8}}{{...boolean[]~|~t9}}{{ ]~|~t10}}{{ ;~|~t11}}6. Выбор определения
Вам представлен фрагмент кода TypeScript, который обрабатывает CSV-строку, содержащую заголовок и данные. Ваша задача — выбрать правильные типы для параметров функции из выпадающего списка, чтобы корректно использовать rest элементы в кортежах. Обратите внимание на то, как rest элементы позволяют работать с переменным количеством аргументов в кортежах.
function processCSV(header: input1S, ...data: input2S): void {
console.log(`Header: ${header}`);
console.log(`Data: ${data.join(', ')}`);
}
// Пример вызова
processCSV('id,name,age', '1,Alice,30', '2,Bob,25');7. Сортировка значений
Перед вами несколько примеров массивов в TypeScript. Распределите их по двум категориям: 'Валидные' и 'С ошибкой типа'. Каждый массив должен быть проверен на соответствие типу `[number, ...string[]]`. Этот тип описывает кортеж, где первый элемент — число, а все последующие (если есть) — строки. Обратите внимание, что rest-элементы (`...string[]`) могут отсутствовать, но первый элемент обязателен и должен быть числом.
[1, "a", "b"][0, "hello"][42, "x", "y", "z"][1]["first", "second"][1, 2, 3][1, "a", 3][]