【发布时间】:2020-07-17 17:31:42
【问题描述】:
一个类似的问题has been asked,但我觉得它并没有完全回答我的问题。
如果我们有一个未知 shape 和未知 length 的对象数组,是否可以使用 TypeScript 创建它们类型的交集?
举个例子,如果我们有一个函数来获取对象并将这些对象合并为一个。
function merge(objects: any[]) {
return objects.reduce((acc = {}, o) => Object.assign(acc, o));
}
const mergedObject = merge([
{ foo: "something" },
{ foo: "something else" },
{ bar: 100 },
{ bar: 500, baz: false },
]);
我们如何才能为这个函数创建一个返回类型,记住函数可以传递任意数量的具有不同属性的对象?
我可以预见到会做一个有限的版本,带有一定数量的通用参数,如下所示:
function merge<A, B, C, D, E, F, G>(
objects: [A, B?, C?, D?, E?, F?, G?]
): A & B & C & D & E & F & G {
return objects.reduce((acc = {} as any, o) => Object.assign(acc, o)) as any;
}
虽然这很愚蠢,但它确实为我们提供了自动完成和类型检查,但它最多只能处理一定数量的对象,而且似乎应该有更好的方法来做到这一点。
有什么方法可以很好地输入这个吗?当然假设函数的输入是静态的,如示例所示。
【问题讨论】:
标签: typescript generics intersection