Utility Type Parameters в TypeScript
Parameters — это утилитный тип в TypeScript, который позволяет узнать, какие типы параметров у функции. Он превращает список аргументов функции в кортеж и помогает избежать дублирования кода.
Синтаксис
Parameters<T>
T
— тип функции, параметры которой вы хотите извлечь.- Результат — массив (кортеж) с типами всех параметров.
Пример использования
Пример 1. Извлечение типов параметров функции
function add(a: number, b: number): number {
return a + b;
}
type AddParameters = Parameters<typeof add>;
// AddParameters имеет тип: [number, number]
В этом примере:
- Функция
add
принимает два параметра типаnumber
. Parameters<typeof add>
извлекает типы этих параметров в виде кортежа[number, number]
.
Пример 2. Использование извлечённых типов в другой функции
function multiply(a: number, b: number): number {
return a * b;
}
function processOperation(...args: Parameters<typeof multiply>): number {
// Здесь args имеет тип [number, number]
return multiply(...args);
}
const result = processOperation(2, 3); // Результат: 6
- Функция
processOperation
использует...args
с типом[number, number]
, извлечённым из функцииmultiply
. - Это обеспечивает согласованность типов и уменьшает дублирование кода.
Зачем использовать Parameters?
- Повторное использование типов: Избегает необходимости вручную объявлять типы параметров, что особенно полезно для функций с большим числом аргументов.
- Поддержка согласованности: Если сигнатура функции меняется, типы, извлечённые через
Parameters
, автоматически обновятся. - Удобство для обёрток: Позволяет создавать обёртки вокруг функций, сохраняя точное соответствие типов входных параметров.
Ограничения
- Overload функции: Если функция имеет несколько перегрузок,
Parameters
возьмёт типы из самой первой сигнатуры, что может не всегда соответствовать ожиданиям. - Generic функции: При работе с generic-функциями может потребоваться дополнительная спецификация типов для корректного извлечения параметров.
Итог
Parameters — мощный утилитный тип, позволяющий извлечь типы параметров функции в виде кортежа. Это способствует более строгой типизации, снижает дублирование и улучшает поддержку кода, особенно в случаях, когда функции используются в различных обёртках и утилитах.