import { Type } from './type.interface'; import { Dependency, OpaqueToken } from './module'; import { Scopes } from '../constants'; export declare type Provider = ValueProvider | FactoryProvider | ExistingProvider | ClassProvider | Dependency; export interface ClassProvider extends ProvideToken, MultiProvider { useClass: Type; } export interface ProvideToken { provide: OpaqueToken; } export interface DepsProvider { deps: Dependency[]; } export interface MultiProvider { multi?: boolean; } export interface MultiDepsProvider extends DepsProvider, MultiProvider { } export interface ExistingProvider extends ProvideToken { useExisting: OpaqueToken; } export interface ValueProvider extends ProvideToken { useValue: T; } export interface FactoryProvider extends ProvideToken, Partial, MultiProvider { useFactory: (...args: any[]) => T; scope?: Scopes; }