Как програмно получить тип аргумента функции?

В TypeScript можно получить тип аргумента функции с помощью инструментов рефлексии и системы типов языка.

Самым простым способом получить тип аргумента функции - это использовать встроенный оператор typeof. Данный оператор позволяет получить строковое представление типа переменной или выражения. Однако, при использовании typeof для аргументов функции, тип будет определяться как "function", а не конкретный тип аргумента.

Для получения точного типа аргумента функции в TypeScript можно воспользоваться специальным типом Parameters. Тип Parameters принимает в качестве аргумента конкретную функцию и возвращает тип параметров этой функции в виде кортежа. Кортеж - это особый тип данных, представляющий собой упорядоченный набор значений фиксированной длины.

Давайте посмотрим на пример кода:

function exampleFunc(arg1: string, arg2: number) {
  console.log(arg1, arg2);
}

type ExampleFuncArgs = Parameters<typeof exampleFunc>;
// ExampleFuncArgs: [string, number]

const args: ExampleFuncArgs = ['Hello, world!', 42];
exampleFunc(...args); // Logs: Hello, world! 42

В данном примере мы определили функцию exampleFunc с двумя аргументами, первый из которых имеет тип string, а второй - number. Затем мы использовали тип Parameters для получения типа аргументов функции exampleFunc и присвоили его переменной ExampleFuncArgs. Тип ExampleFuncArgs будет равен кортежу [string, number].

Теперь мы можем использовать полученный тип ExampleFuncArgs, чтобы создать переменные с типизированными значениями аргументов функции exampleFunc. Также мы можем передать эти значения функции exampleFunc при помощи оператора распространения ... для разворачивания кортежа в отдельные аргументы.

Таким образом, при использовании типа Parameters, мы можем статически получить и использовать тип аргумента функции в TypeScript.