UNPKG

@thisisagile/easy

Version:

Straightforward library for building domain-driven microservice architectures

12 lines (11 loc) 572 B
export type AnyKey<T, Visited = never> = { [Key in keyof T & (string | number)]: T[Key] extends object ? T[Key] extends (...args: unknown[]) => unknown ? `${Key}` // don't recurse into function types : T[Key] extends Visited ? `${Key}` // already visiting this type -> break cycle : Key extends keyof T[Key] & (string | number) ? `${Key}` // nested type has same key (e.g. inAmsterdam().inAmsterdam()) -> break chain : `${Key}` | `${Key}.${AnyKey<T[Key], Visited | T>}` : `${Key}`; }[keyof T & (string | number)];