TS как вывести массив типов параметров из массива дженериков?

В TypeScript для вывода массива типов параметров из массива дженериков необходимо использовать Type Inference и типовые операторы.

Для начала, давайте рассмотрим простой пример, где у нас есть массив дженериков, и мы хотим вывести типы параметров каждого дженерика в отдельный массив.

type Generic<T> = (arg: T) => void;

const genericsArray: Generic<number | string>[] = [
  (arg) => console.log(arg),
  (arg) => console.log(arg.toString())
];

В данном примере у нас есть тип Generic с одним параметром T, который представляет собой функцию, принимающую аргумент типа T и не возвращающую ничего. Затем у нас есть массив дженериков genericsArray, который состоит из двух элементов. Первый элемент принимает аргумент типа number | string и выводит его в консоль, а второй элемент принимает аргумент того же типа и выводит его строковое представление.

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

type Generic<T> = (arg: T) => void;

const genericsArray: Generic<number | string>[] = [
  (arg) => console.log(arg),
  (arg) => console.log(arg.toString())
];

type ParametersArray = {
  [K in keyof typeof genericsArray]: Parameters<typeof genericsArray[K]>[0];
};

const parametersArray: ParametersArray = [
  42,
  "Hello, TypeScript"
];

console.log(parametersArray); // Output: [number, string]

В этом примере мы определяем новый тип ParametersArray, который использует оператор keyof для итерации по типам дженериков в массиве genericsArray. Затем мы используем оператор Parameters для получения массива типов параметров каждого дженерика. Таким образом, тип ParametersArray будет представлять массив типов параметров дженериков. Затем мы создаем переменную parametersArray, которая содержит фактические значения параметров для каждого дженерика.

Наконец, мы выводим результат в консоль. Здесь мы можем увидеть, что parametersArray содержит массив типов [number, string], то есть типы параметров каждого дженерика.

Таким образом, используя TypeScript type inference и оператор Parameters, мы можем вывести массив типов параметров из массива дженериков.