import { DependencyKey } from './container/IContainer';
import { IInjectFnResolver } from './injector/IInjector';
import { DepKey } from './DepKey';
export type constructor<T> = new (...args: any[]) => T;
export interface InstanceOfClass<T = unknown> {
    new (...args: unknown[]): T;
}
export type MapFn<T> = (value: T) => T;
export declare const pipe: <T>(...mappers: MapFn<T>[]) => MapFn<T>;
export declare function fillEmptyIndexes<T>(baseArr: (T | undefined)[], insertArr: T[]): T[];
export declare const constant: <T>(value: T) => () => T;
export declare function lazyProxy<T>(resolveInstance: () => T): T;
export declare function toLazyIf<T>(resolveInstance: () => T, isLazy?: boolean): T;
export declare const promisify: <T>(arg: T | Promise<T>) => Promise<T>;
export declare const List: {
    lastOf: <T>(arr: T[]) => T;
};
export declare const Filter: {
    exclude: <T>(arr: Set<T> | T[]) => (v: T) => boolean;
};
export declare const Is: {
    object: (target: unknown) => target is object;
    instance: (target: unknown) => target is InstanceOfClass;
    constructor: (target: unknown) => target is constructor<unknown>;
    dependencyKey: (target: unknown) => target is DependencyKey;
    injectBuilder: (target: unknown) => target is IInjectFnResolver<unknown>;
    DepKey: <T>(key: unknown) => key is DepKey<T>;
};
