![](/img/trans.png)
[英]TypeScript union of strings not assignable to union of tuples in function
[英]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
和函数联合上的分布条件类型动态创建的。
我该怎么做?
好吧,你需要三件事来实现:
第一个是一个简单的,包括映射类型和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.