Я хочу определить тип в машинописи, которому может быть передано произвольное число обобщенных c типов. Затем этот тип должен определить, что если он применяется к параметру rest, он позволяет функции получать параметры во множестве предоставленных типов. Пример может выглядеть следующим образом:
function single(...args: HeterogeneousRest<number>) {...}
// works
single();
single(1);
single(1, 2, 1, 3, 4);
// does not work
single(1, "foobar")
function double(...args: HeterogeneousRest<number, string>) {...}
// works
double();
double(1, 'foobar');
double(1, 'foobar', 2, 'bazbar');
// does not work
double(1);
double(1, 'foobar', 2);
double('foobar', 2);
В случае второй функции double
было бы разрешено повторить в этом порядке number
, а затем string
произвольное число раз, начиная с 0 до бесконечности. Тогда число разрешенных параметров, конечно, кратно 2.
Если бы были определены три обобщенных типа c, конечно, это было бы кратно трем и т. Д. c.
. Тип BTW не должен иметь эту подпись. Я не зациклен на этом, если невозможно определить типы с произвольным числом параметров типа. Также было бы достаточно использовать тип как:
HeterogeneousRest<[number, string, boolean]>
HeterogeneousRest<number, HeterogeneousRest<string, HeterogeneousRest<boolean>>>
...
Что бы ни работало нормально, до тех пор, пока выполняются условия.
Прежде, чем кто-либо обвинит меня, потому что уже есть статья где-то, что точно описывает то, что я ищу, я потратил два дня на поиски в нем разных поисковых запросов и попытался создать его сам, но не смог. И единственные вещи, которые могли бы работать при перегрузках, но вместо этого я хотел решить это с помощью метапрограммирования, поскольку в конкретном примере может быть много параметров.
Надеюсь, мое объяснение имеет смысл. Заранее спасибо.