import { Type } from './type';
export declare class InjectionToken {
    injectionIdentifier: string;
    constructor(injectionIdentifier: string);
}
export declare type Factory<T> = () => T;
export declare type Token<T> = Type<T> | any;
export interface BaseProvider<T> {
    provide: Token<T>;
}
export interface ClassProvider<T> extends BaseProvider<T> {
    provide: Token<T>;
    useClass: Type<T>;
}
export interface ValueProvider<T> extends BaseProvider<T> {
    provide: Token<T>;
    useValue: T;
}
export interface FactoryProvider<T> extends BaseProvider<T> {
    provide: Token<T>;
    useFactory: Factory<T>;
}
export declare type Provider<T> = ClassProvider<T> | ValueProvider<T> | FactoryProvider<T>;
export declare function isClassProvider<T>(provider: BaseProvider<T>): provider is ClassProvider<T>;
export declare function isValueProvider<T>(provider: BaseProvider<T>): provider is ValueProvider<T>;
export declare function isFactoryProvider<T>(provider: BaseProvider<T>): provider is FactoryProvider<T>;
