gpt4 book ai didi

未知对象合并的 typescript 返回类型

转载 作者:行者123 更新时间:2023-12-02 02:42:38 25 4
gpt4 key购买 nike

我有一个函数需要未知的对象,我想输出它们的合并版本:

export function merge(...objects: any[]) {
return objects.reduce((acc, current) => {
acc = {
...acc,
...current
}
return acc;
}, {});
}


const a = { name: '' };
const b = { id: 1 };
const c = { prop: '' };

const result = merge(a, b, c);

如何根据传递的对象自动推断 result 变量的类型?

最佳答案

objects 数组组件类型是各个对象类型的并集,结果就像一个交集,因此这里是使用 this answer 中的并集到交集转换的解决方案。 .

type UnionToIntersection<U> = 
(U extends any ? (k: U)=>void : never) extends ((k: infer I)=>void) ? I : never

type Merge<A extends any[]> = UnionToIntersection<A[number]>

用法:

function merge<A extends any[]>(...objects: A): Merge<A> {
// ...
}

const result = merge({ a: 1 }, { b: 'foo' }, { c: 2, d: 'bar' });
// result: { a: number } & { b: string } & { c: number, d: string }

结果实际上等同于 { a: number, b: string, c: number, d: string } 但不幸的是 Typescript 并没有简化它。

Playground Link

关于未知对象合并的 typescript 返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63325817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com