繁体   English   中英

打字稿 - 参数元组的连接联合

[英]Typescript - concat union of Parameters tuples

我有一个参数联合:

type Params = [{ name: string }] | [{ x: number, y: number } | ...];

我想连接联合中的每个元组(独立于联合中的元组数量)并得到如下结果:

type ParamsJoined = [{ name: string, x: number, y: number, ... }];

我不能使用像const这样的技巧,因为类型Params是使用Parameters和函数联合上的分布条件类型动态创建的。

我该怎么做?

好吧,你需要三件事来实现:

  1. 从数组类型中提取底层类型。
  2. 拆分联合类型
  3. 并将拆分类型合二为一。

第一个是一个简单的,包括映射类型和infer关键字:

type UnderlyingType<T> = T extends Array<infer R> ? R : T;

对于第二个,你必须参考这个问题。

第三个有点高级,你应该参考这个问题。

最后,您将获得如下内容:


type U1 = UnderlyingType<Params>

type SplitTyped = SplitType<U1>

type FinalType = Spread<SplitTyped[0],SplitTyped[1]>

游乐场链接

编辑:对于未知数量的类型参数(仅限于某处),您可以利用SpreadTuple类型映射来实现

type SpreadTuple<T extends any[], L extends number = T['length']> = L extends 0 ? never 
: L extends 1 ? T[0] 
: L extends 2 ? Spread<T[0], T[1]> 
: L extends 3 ? Spread<T[0], Spread<T[1], T[2]>> 
: L extends 4 ? Spread<T[0], Spread<T[1],Spread<T[2],T[3]>>> 
: never; // continiue to somewhere

然后您可以根据需要使用它:

type FinalType = SpreadTuple<SplitTyped>

游乐场链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM