typescript - 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[]
您可以使用具有for a rest 参数约束的泛型类型参数来捕获元组类型中的参数。您可以使用此处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;
}
推荐阅读
- javascript - 在带有插座的 React 中使用 V6 的嵌套路由
- reactjs - CheckBox onClick 在反应类型脚本中不起作用
- bash - 在 shell 脚本中编写 ghci 会话
- android - 在 Android 上显示连接设置对话框
- python - 尝试获取库存通知时出现 bs4 问题
- python - 为 for 循环中存在的值运行多个无限循环
- flutter - 如何在 Flutter 中将容器堆叠在键盘上,类似于聊天中的 WhatsApp“更多”部分
- python - jupyter notebook(dyld:库未加载)
- javascript - 从数据库中的用户获取信息
- javascript - 如反应应用程序中所示,在反应本机中创建公共文件夹