const aa = {
action: [
{
name: 'a',
c: '1'
},
{
name: 'b',
c: '1'
}
],
inject: [
{
name: 'c',
c: '1'
},
{
name: 'd',
c: '1'
}
]
}
// interface P {
// name: string
// [props: string]: any
// }
type GetName<Item extends any> = Item extends {name: infer V} ? V : never;
type EachArr<Head extends any, Rest extends any[]> = [Head, ...Rest]
type GetArrUnions<Arr extends any[]> =
Arr extends [] ? ''
: Arr extends EachArr<infer F, []> ? GetName<F>
: Arr extends EachArr<infer F, infer R> ? GetName<F> | GetArrUnions<R>
: never
type GetObjectUnions<O extends Record<any, any>> = {
[K in keyof O]: GetArrUnions<O[K]>
}[keyof O]
type U = GetObjectUnions<typeof aa>
我想获取 U
类型为 abcd
的联合类型,但是目前实现的是 neve
r类型,我找到问题原因是因为 O[K]
这里导致的,不知道怎么处理