我有一种联合类型,比如:
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/