我有一种联合类型,比如:

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

那我怎样才能把这种类型缩小到后者呢?当然这不管用:
type WithEntries = Exclude<T, {}>

导致never
这可能吗?

最佳答案

干得好

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'是union类型的一部分,因此第二个条件可以通过将其转换为never来“过滤”空类型,结果是never | (non-empty parts of T)的union,并且unionnever | P对于任何P都只是P
这个想法来了。

关于typescript - TypeScript:从联合中仅排除精确的{},我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53565879/

10-11 11:42