import type { ServiceLifetime, ServiceProvider, ServiceDependency, Interfaceable, ResolveDependencies } from '../types'; declare type AnyDep = ServiceDependency>; declare type ClassProviderOptions = { /** The provider name for debugging purpose */ name?: string; /** The interfaces of the required dependencies */ deps?: Deps; /** The factory function to create the instance, default to `(...deps) => new Klazz(...deps)` */ factory?: (...args: ResolveDependencies) => T; /** The lifetime of the instance, default to 'singleton' */ lifetime?: ServiceLifetime; }; declare type Constructor = { new (...args: any[]): T; }; declare function makeClassProvider<_T, A extends AnyDep>(opts: ClassProviderOptions<_T, [A]>): >(klazz: Klazz & Constructor) => ServiceProvider> & Klazz; declare function makeClassProvider<_T, A extends AnyDep, B extends AnyDep>(opts: ClassProviderOptions<_T, [A, B]>): >(klazz: Klazz & Constructor) => ServiceProvider> & Klazz; declare function makeClassProvider<_T, A extends AnyDep, B extends AnyDep, C extends AnyDep>(opts: ClassProviderOptions<_T, [A, B, C]>): >(klazz: Klazz & Constructor) => ServiceProvider> & Klazz; declare function makeClassProvider<_T, A extends AnyDep, B extends AnyDep, C extends AnyDep, D extends AnyDep>(opts: ClassProviderOptions<_T, [A, B, C, D]>): >(klazz: Klazz & Constructor) => ServiceProvider> & Klazz; declare function makeClassProvider<_T, A extends AnyDep, B extends AnyDep, C extends AnyDep, D extends AnyDep, E extends AnyDep>(opts: ClassProviderOptions<_T, [A, B, C, D, E]>): >(klazz: Klazz & Constructor) => ServiceProvider> & Klazz; declare function makeClassProvider<_T, A extends AnyDep, B extends AnyDep, C extends AnyDep, D extends AnyDep, E extends AnyDep, F extends AnyDep>(opts: ClassProviderOptions<_T, [A, B, C, D, E, F]>): >(klazz: Klazz & Constructor) => ServiceProvider> & Klazz; declare function makeClassProvider<_T, A extends AnyDep, B extends AnyDep, C extends AnyDep, D extends AnyDep, E extends AnyDep, F extends AnyDep, G extends AnyDep>(opts: ClassProviderOptions<_T, [A, B, C, D, E, F, G]>): >(klazz: Klazz & Constructor) => ServiceProvider> & Klazz; declare function makeClassProvider<_T, A extends AnyDep, B extends AnyDep, C extends AnyDep, D extends AnyDep, E extends AnyDep, F extends AnyDep, G extends AnyDep, H extends AnyDep>(opts: ClassProviderOptions<_T, [A, B, C, D, E, F, G, H]>): >(klazz: Klazz & Constructor) => ServiceProvider> & Klazz; declare function makeClassProvider<_T, A extends AnyDep, B extends AnyDep, C extends AnyDep, D extends AnyDep, E extends AnyDep, F extends AnyDep, G extends AnyDep, H extends AnyDep, I extends AnyDep>(opts: ClassProviderOptions<_T, [A, B, C, D, E, F, G, H, I]>): >(klazz: Klazz & Constructor) => ServiceProvider> & Klazz; declare function makeClassProvider<_T, A extends AnyDep, B extends AnyDep, C extends AnyDep, D extends AnyDep, E extends AnyDep, F extends AnyDep, G extends AnyDep, H extends AnyDep, I extends AnyDep, J extends AnyDep>(opts: ClassProviderOptions<_T, [A, B, C, D, E, F, G, H, I, J]>): >(klazz: Klazz & Constructor) => ServiceProvider> & Klazz; export default makeClassProvider;