TypeScript:从联合中仅排除精确的{}

时间:2018-11-30 22:41:44

标签: typescript

我的联合类型如下:

type T = {} | ({ some: number } & { any: string })

那我怎样才能缩小到后者呢?当然这行不通:

type WithEntries = Exclude<T, {}>

产生never

这可能吗?

1 个答案:

答案 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