Определите тип TypeScript для повторяющихся переменных типов в параметрах остальных - PullRequest
2 голосов
/ 06 апреля 2020

Я хочу определить тип в машинописи, которому может быть передано произвольное число обобщенных 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>>>
...

Что бы ни работало нормально, до тех пор, пока выполняются условия.

Прежде, чем кто-либо обвинит меня, потому что уже есть статья где-то, что точно описывает то, что я ищу, я потратил два дня на поиски в нем разных поисковых запросов и попытался создать его сам, но не смог. И единственные вещи, которые могли бы работать при перегрузках, но вместо этого я хотел решить это с помощью метапрограммирования, поскольку в конкретном примере может быть много параметров.

Надеюсь, мое объяснение имеет смысл. Заранее спасибо.

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