import type { ServiceContainer, ServiceDependency, Interfaceable, ResolveDependencies } from '../types'; declare type AnyDep = ServiceDependency>; declare type ContainerOptions>[]> = { /** The container name for debugging purpose */ name?: string; /** The interfaces of the required dependencies */ deps?: Deps; }; declare type FactoryFn = (...args: ResolveDependencies) => T; declare type ContainerFn = ServiceContainer> & ((...args: ResolveDependencies) => T); declare function makeContainer(opts: ContainerOptions<[A]>): (fn: FactoryFn) => ContainerFn; declare function makeContainer(opts: ContainerOptions<[A, B]>): (fn: FactoryFn) => ContainerFn; declare function makeContainer(opts: ContainerOptions<[A, B, C]>): (fn: FactoryFn) => ContainerFn; declare function makeContainer(opts: ContainerOptions<[A, B, C, D]>): (fn: FactoryFn) => ContainerFn; declare function makeContainer(opts: ContainerOptions<[A, B, C, D, E]>): (fn: FactoryFn) => ContainerFn; declare function makeContainer(opts: ContainerOptions<[A, B, C, D, E, F]>): (fn: FactoryFn) => ContainerFn; declare function makeContainer(opts: ContainerOptions<[A, B, C, D, E, F, G]>): (fn: FactoryFn) => ContainerFn; declare function makeContainer(opts: ContainerOptions<[A, B, C, D, E, F, G, H]>): (fn: FactoryFn) => ContainerFn; declare function makeContainer(opts: ContainerOptions<[A, B, C, D, E, F, G, H, I]>): (fn: FactoryFn) => ContainerFn; declare function makeContainer(opts: ContainerOptions<[A, B, C, D, E, F, G, H, I, J]>): (fn: FactoryFn) => ContainerFn; export default makeContainer;