gpt4 book ai didi

typescript - 是否可以从联合中排除空对象?

转载 作者:行者123 更新时间:2023-12-03 16:35:23 24 4
gpt4 key购买 nike

我有两种类型的联合,其中一种是空 obj。

type U = {} | { a: number } // | { b: string } | { c: boolean } ....

我想从联合中排除空对象 Exclude没有帮助
type A = Exclude<U, {}>
// A = never

我尝试使用 as const但结果相同
const empty = {} as const
type Empty = typeof empty
type U = Empty | { a: number }
type A = Exclude<U, Empty>
//type A = never

额外的讽刺是排除其他属性很简单
  type B = Exclude<U, { a: number }>
// type B = {}

TS Playground

那么是否可以从联合中的其他接口(interface)中排除一个空接口(interface)?

最佳答案

回答我自己的问题..
如果您使用 AtLeastOne来自@lukasgeiter 的回答:Exclude empty object from Partial type
您可以执行以下操作:

type AtLeastOne<T, U = {[K in keyof T]: Pick<T, K> }> = Partial<T> & U[keyof U];

type ExcludeEmpty<T> = T extends AtLeastOne<T> ? T : never;

type U = {} | { a: number } | { b: string }

type Foo = ExcludeEmpty<U> // { a: number } | { b: string }
TSplayground

关于typescript - 是否可以从联合中排除空对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61410242/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com