我的联合类型如下:
type T = {} | ({ some: number } & { any: string })
那我怎样才能缩小到后者呢?当然这行不通:
type WithEntries = Exclude<T, {}>
产生never
。
这可能吗?
答案 0 :(得分:2)
你在这里
type T = {} | ({ some: number } & { any: string })
type X<T> = T extends {} ? ({} extends T ? never : T) : never;
type WithEntries = X<T>; // { some: number; } & { any: string; }
联合条件类型的第一个条件'distributes'部分,以便第二个条件可以通过将其转换为never
'过滤掉'空类型,结果是{{1}的联合},而联合never | (non-empty parts of T)
仅是never | P
的{{1}}。
这个想法来自from this answer。