是否可以采用不同对象的元组,并将所有这些对象的类型组合在一起?例如,如果我有一个像这样的元组:
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;
}
游乐场链接