import { AbstractType, Type } from './type'; import { InjectionToken } from './injection-token'; export interface ClassProvider { provide: Type | AbstractType | InjectionToken; useClass: Type; deps?: any[]; } export interface FactoryProvider { provide: Type | AbstractType | InjectionToken; useFactory: (...args: any[]) => T; deps?: any[]; } export interface ValueProvider { provide: Type | AbstractType | InjectionToken; useValue: T; } export interface ExistingProvider { provide: Type | AbstractType | InjectionToken; useExisting: T; } export interface ConstructorProvider { provide: Type; deps?: []; } export interface TypeProvider extends Type { } export interface AbstractProvider extends AbstractType { } export declare type StaticProvider = ClassProvider | FactoryProvider | ValueProvider | ExistingProvider | ConstructorProvider; export declare type Provider = TypeProvider | AbstractProvider | StaticProvider;