Typescript,组合元组元素的对象类型



是否可以采用不同对象的元组,并将所有这些对象的类型组合在一起?例如,如果我有一个像这样的元组:

const t = tuple({current: 1}, {old: 2}, {new: 3}); //this should be interpreted as [{current: number;}, {old: number;}, {new: number;}]

然后我把这些对象组合成一个单独的对象:

let newob = {};
for(let ob of t) {
Object.assign(newob, ob);
}

我能以某种方式让打字脚本把这个新对象当作吗

typeof t[0] & typeof t[1] & typeof t[2]

在这种情况下是

{current: number; old: number; new: number;}

而不用手动键入所有内容?

我希望它能处理任何元组和元组中的任何对象

您可以使用约束为any[]的泛型类型参数来捕获元组类型中的参数。您可以使用此处描述的UnionToIntersection将所有元组项类型合并到单个交集类型中

type UnionToIntersection<U> = 
(U extends any ? (k: U)=>void : never) extends ((k: infer I)=>void) ? I : never
function tuple<T extends any[]>(...t: T) {
let newob = {} as UnionToIntersection<T[number]>;
for (let ob of t) {
Object.assign(newob, ob);
}
return newob;
}

游乐场链接

最新更新