Utility Type Parameters<T> позволяет извлекать типы аргументов функции и представлять их в виде кортежа (tuple). Это невероятно полезно при разработке оберток, декораторов или когда вам нужно повторно использовать тип аргументов чужой функции, который не был экспортирован отдельно.
Синтаксис выглядит как Parameters<typeof MyFunc>. Если функция принимает (name: string, age: number), то Parameters вернет тип [string, number]. Вы можете обращаться к конкретным аргументам по индексу, например Parameters<...>[0]. Эти уроки и интерактивные тесты научат вас динамически выводить типы из функций, делая ваш код более гибким (DRY — Don't Repeat Yourself).
- Модуль 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 — функции
- ReturnType.
- Parameters.
- Awaited.
- Модуль 20: Type Assertions
- Модуль 21: Keyof и Typeof операторы
- Модуль 22: Mapped Types
- Модуль 23: Conditional Types
- Модуль 24: Discriminated Unions
- Модуль 25: Модули и типы
- Модуль 26: Declaration Files
- Модуль 27: Типизация асинхронного кода
- Модуль 28: Практические паттерны
1. Использование typeof
В этом задании вам нужно применить утилитный тип Parameters для извлечения типов параметров функции. В предоставленном фрагменте кода пропущено ключевое слово, необходимое для корректной работы с функцией как с типом. Ваша задача — вставить пропущенный элемент так, чтобы тип GreetParams корректно представлял кортеж типов параметров функции greet. Обратите внимание, что для получения типа функции в контексте утилитных типов требуется специальный оператор.
function greet(name: string, age: number): string {
return `Hello, ${name}. You are ${age} years old.`;
}
// Извлеките тип параметров функции greet
type GreetParams = Parameters<input1S greet>; // Ожидаемый тип: [string, number]
// Пример использования
const params: GreetParams = ['Alice', 30];2. Получение типа по индексу
В данном фрагменте кода TypeScript объявляется функция с двумя параметрами и используется утилитный тип Parameters для извлечения типа второго параметра. Определите, какой тип будет получен при обращении к элементу кортежа с индексом 1. Введите одно слово - название типа (например, string, number, boolean и т.д.).
function example(a: boolean, b: string): void {
// тело функции
}
type Params = Parameters<typeof example>;
type SecondParam = Params[1]; // какой тип будет у SecondParam?3. Определение типа параметров
В этом задании вам нужно определить тип переменной, чтобы она соответствовала параметрам функции. Используйте утилитный тип Parameters для извлечения типов аргументов функции. В коде ниже есть пропуски, которые нужно заполнить, выбрав подходящие варианты из выпадающего списка. Обратите внимание на синтаксис TypeScript и правильное использование дженериков.
function processData(name: string, age: number, active: boolean): void {
console.log(`Name: ${name}, Age: ${age}, Active: ${active}`);
}
// Определите тип параметров функции processData
let params: input1S = ['Alice', 30, true];
// Используйте params для вызова функции
processData(...params);4. Повторное использование аргументов
Из предложенных строк соберите корректную TypeScript-программу, которая создаёт новую функцию `logAndCall`, принимающую те же аргументы, что и исходная функция `multiply`, используя spread operator и Utility Type `Parameters`. Новая функция должна логировать аргументы перед вызовом исходной функции и возвращать её результат. Лишние строки в решение включать не нужно.
function multiply(a: number, b: number): number { return a * b;}const logAndCall = (...args: Parameters<typeof multiply>) => { console.log('Arguments:', args); return multiply(...args);};const result = logAndCall(5, 3);console.log('Result:', result);const wrongCall = logAndCall(5);console.log(multiply(2, 4));5. Передача значения вместо типа
В этом фрагменте TypeScript-кода допущена ошибка при использовании утилиты типа Parameters. Вместо типа функции передается её значение, что приводит к ошибке компиляции. Найдите и исправьте строку с ошибкой, чтобы правильно извлечь типы параметров функции.
function formatUser(name: string, age: number): string { return `${name} (${age})`;} // Ошибка: передается значение функции, а не её типtype FormatParams = Parameters(formatUser); const params: FormatParams = ['Alice', 30];6. Что попадет в кортеж?
Перед вами объявление функции на TypeScript. Внимательно изучите сигнатуру функции. Ваша задача — отметить (кликнуть) все типы аргументов функции, которые будут включены в кортеж, возвращаемый утилитным типом `Parameters
{{function~|~t0}} {{process~|~t1}}<{{T~|~t2}}>({{id~|~t3}}: {{T~|~t4}}, {{count~|~t5}}: {{number~|~t6}}, {{label~|~t7}}: {{string~|~t8}}): {{void~|~t9}} {}7. Функция - Кортеж
В левой колонке приведены сигнатуры функций TypeScript. В правой колонке — результаты применения утилитарного типа Parameters к этим функциям, представленные в виде кортежей типов. Сопоставьте каждую сигнатуру функции (слева) с соответствующим кортежем типов её параметров (справа). Обратите внимание на типы параметров, их количество и модификаторы (например, опциональные параметры или параметры с типом по умолчанию).
(x: number, y: string): void(a: boolean, b?: number): boolean<T>(items: T[], index: number): T(name: string = 'guest'): string(...args: number[]): number[boolean, number | undefined][number, string][T[], number][...number[]][string]