首页 > 解决方案 > 为剩余参数中的重复交替类型定义 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>>>
...

只要满足条件,任何工作都可以。

在有人责怪我之前,因为已经有一篇文章准确地描述了我正在寻找的东西,我花了两天时间用不同的搜索查询在谷歌上搜索它,并尝试自己构建它,但没有成功。唯一可以在重载的地方工作,但我想用元编程来解决这个问题,因为具体的例子可能有很多参数。

我希望我的解释是有道理的。先感谢您。

标签: typescript

解决方案


推荐阅读