type Children<T> = { children: Record<string, T> }
type TPartial = { info: string }
// Error: Type alias 'TRequired' circularly references itself.
type TRequired = { id: string } & Children<T>
// Error: Type alias 'T' circularly references itself.
type T = Partial<TPartial> & AtLeastOne<TRequired>
// 至少包含一个属性
type AtLeastOne<T, K extends keyof T = keyof T> = K extends unknown
? Pick<T, K> & Partial<Omit<T, K>>
: never;
但是这样写就没有问题:
type TPartial = { info: string }
type TRequired = { id: string } & { children: Record<string, T> }
type T = Partial<TPartial> & AtLeastOne<TRequired>
type Children
是一个通用的工具类型,但是有些地方可以写,有些地方就会报循环引用。如果我有些地方写 Children
有些地方写 { children: T }
那还不如不要这个类型。有没有类型体操高手救救我?