import { IContainer } from '../container/IContainer';
import { InjectionToken } from './InjectionToken';
import { type constructor } from '../utils/basic';
import { ArgsFn, ProviderOptions } from '../provider/IProvider';
export declare class ClassToken<T = any> extends InjectionToken<T> {
    private readonly target;
    private readonly _getArgsFn;
    private readonly _isLazy;
    constructor(target: constructor<T>, { getArgsFn, isLazy }?: {
        getArgsFn?: ArgsFn;
        isLazy?: boolean;
    });
    select<R>(fn: (target: T) => R): (s: IContainer) => R;
    resolve(s: IContainer, { args, lazy }?: ProviderOptions): T;
    args(...newArgs: unknown[]): ClassToken<T>;
    argsFn(fn: (s: IContainer) => unknown[]): ClassToken<T>;
    lazy(): ClassToken<T>;
}
