为剩余参数中重复交替类型定义 TypeScript 类型
我想在 TypeScript 中定义一个类型,该类型可以传入任意数量的泛型类型。然后,该类型应该定义,如果应用于剩余参数,它允许函数以所提供类型的倍数接收参数。一个示例如下所示:
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 的倍数。
如果定义了三种通用类型,当然它将是三的倍数,等等。
BTW类型不必具有这种签名。如果无法为类型定义任意数量的类型参数,我也不在意。使用该类型如下也可以:
HeterogeneousRest<[number, string, boolean]>
HeterogeneousRest<number, HeterogeneousRest<string, HeterogeneousRest<boolean>>>
...
只要条件满足,什么方法都可以。
在任何人责怪我之前,因为已经有一篇文章 somewhere 准确描述了我正在寻找的内容,我花了两天时间用不同的搜索查询在谷歌上搜索,并尝试自己构建它,但没有成功。唯一可行的方法是使用重载,但我想用元编程来解决这个问题,因为具体的例子可能有很多参数。
我希望我的解释能讲得清楚。提前谢谢你。