В этом уроке мы разберем Rest параметры в TypeScript. Это мощный инструмент, позволяющий функции принимать неограниченное количество аргументов в виде массива. Это особенно полезно, когда вы заранее не знаете, сколько значений передаст пользователь.
Синтаксис прост: перед именем параметра ставится троеточие ..., а сам параметр типизируется как массив (например, ...numbers: number[]). Важное правило: Rest параметр всегда должен быть последним в списке аргументов. Внутри функции вы работаете с ним как с обычным массивом, используя методы вроде map, reduce или forEach.
Эти уроки и задания помогут вам научиться писать гибкие функции, которые легко масштабируются. Вы попрактикуетесь в объявлении rest-параметров, их типизации и использовании в реальных сценариях агрегации данных.
- Модуль 1: Введение в TypeScript
- Модуль 2: Примитивные типы
- Модуль 3: Специальные типы
- Модуль 4: Массивы
- Модуль 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. Синтаксис Rest параметра
Дополните фрагмент кода функции sum, которая должна принимать произвольное количество чисел и возвращать их сумму. Используйте синтаксис rest параметра. Вставьте оператор троеточия перед именем параметра и укажите тип массива чисел. Код должен корректно компилироваться и выполнять суммирование.
function sum(input1S numbersinput2S): number {
return numbers.reduce((total, current) => total + current, 0);
}2. Определение rest-параметра
В данной сигнатуре функции с rest параметром выделите два элемента: имя параметра и его тип. Обратите внимание, что rest параметр позволяет функции принимать произвольное количество аргументов в виде массива. Выберите для каждого выделенного фрагмента, является ли он именем параметра или типом параметра.
function logMessages(...{{messages~|~t1}}: {{string[]~|~t2}}): void3. Порядок параметров
В данном фрагменте кода TypeScript допущена синтаксическая ошибка, связанная с использованием rest-параметров. Rest-параметр должен находиться в конце списка параметров функции, но в текущем коде он расположен неправильно. Найдите строку с ошибкой и исправьте порядок параметров, чтобы функция могла корректно принимать аргументы.
function processItems(...items: string[], prefix: string): string[] { return items.map(item => prefix + item);}4. Типизация массива аргументов
В этом задании вам предстоит дополнить код функции, которая объединяет строки, используя rest-параметры. В коде TypeScript с пропуском после двоеточия нужно выбрать правильный тип для массива аргументов из предложенного списка вариантов. Обратите внимание, что функция принимает произвольное количество строк и возвращает их объединение через пробел. Ваша задача — указать корректную типизацию rest-параметра, чтобы код был валидным и выполнял свою задачу.
function concatStrings(...strings: input1S): string {
return strings.join(' ');
}
const result = concatStrings('Hello', 'TypeScript', 'World');
console.log(result); // Вывод: Hello TypeScript World5. Сборка функции с rest
Из предложенных строк соберите корректную функцию на TypeScript, которая использует rest параметры для приёма произвольного количества чисел и возвращает их сумму, применяя метод reduce. Функция должна быть объявлена с именем sum, принимать массив чисел и возвращать число. Игнорируйте лишние строки, которые не соответствуют этим требованиям или используют другие подходы (например, циклы).
function sum(...args: number[]): number { const total = args.reduce((accumulator, currentValue) => { return accumulator + currentValue; }, 0); return total;}function product(...args: number[]): number { return args.reduce((acc, curr) => acc * curr, 1); for (let i = 0; i < args.length; i++) { total += args[i]; } console.log(args);6. Результат работы с разным числом аргументов
Проанализируйте приведённый ниже код на TypeScript, использующий rest-параметр. Определите, какое значение будет присвоено переменной result после вызова функции с пятью аргументами. Обратите внимание на механизм работы rest-параметров и то, как они собирают переданные аргументы в массив.
function countArgs(...args: any[]): number {
return args.length;
}
const result = countArgs(10, 20, 30, 40, 50);7. Логика обработки списка
Проанализируйте TypeScript-код сверху и восстановите последовательность логических шагов выполнения программы. Шаги снизу перемешаны — расставьте их в правильном порядке, чтобы отразить, как программа обрабатывает переданные аргументы с использованием rest параметров и что выводит в консоль.
function processItems(...items: string[]): void {
console.log('Начало обработки списка:');
for (const item of items) {
console.log(`Обработан элемент: ${item}`);
}
console.log('Обработка завершена.');
}
// Вызов функции с несколькими аргументами
processItems('яблоко', 'банан', 'вишня');