请问ts中如果把数组中的对象的类型生成一个混合对象?

type D<T extends Record<string,unknown>[]> = '如何实现?'
type E = D<[{a:1},{b:2},{c:3}]> // {a:1,b:2,c:3}

数组长度未知

上面D也可以不是数组, 支持传入多个类型参数也行

阅读 2.7k
1 个回答

类型体操了属于是..

type ArrayStuct<Head extends Record<string, number>, Tail extends Record<string, number>[]> = [Head, ...Tail];

type Merge<Arr extends Record<string, number>[]> =
    Arr extends [] ? {}
    : Arr extends ArrayStuct<infer Head, []> ? Head
    : Arr extends ArrayStuct<infer Head, infer Tail> ? Head & Merge<Tail>
    : never;

type D<T extends Record<string, number>[]> = Merge<T>;

type E = D<[{ a: 1 }, { b: 2 }, { c: 3 }]>
推荐问题