import { Graph } from '../graph/Graph'; export type Constructable = { new(...args: any): T; }; export type Constructor = { new(...args: any[]): any }; export type AbstractConstructor = abstract new (...args: any[]) => any; export type ServiceLocator = { [Key in keyof Clazz]: () => Clazz[Key] extends (...args: any[]) => infer R ? R : never; }; export type GraphInternals = 'retrieve' | 'name' | 'scope' | 'onBind'; export type DependenciesOf = never> = Partial extends never ? DependenciesOfInternal : Pick, Dependencies>; type DependenciesOfInternal = G extends Graph ? DependenciesOf1 : G extends any[] ? DependenciesOfN : never; type DependenciesOfN = Graphs extends [infer G, ...infer R] ? DependenciesOf1 & DependenciesOfN : unknown; type DependenciesOf1 = { [Key in keyof Omit]: Graph[Key] extends (...args: any[]) => infer R ? R : never; };