import { IService } from "./types";
type ServiceConstructor<T extends IService = IService> = new (...args: any) => T;
type Instances<T extends (ServiceConstructor | IService)[]> = {
    [k in keyof T]: T[k] extends ServiceConstructor<infer I> ? I : T[k] extends IService ? T[k] : never;
};
export declare function useTransaction<T extends ServiceConstructor, R>(type: T, func: (service: InstanceType<T>) => Promise<R>): Promise<R>;
export declare function useTransaction<T extends IService, R>(type: T, func: (service: T) => Promise<R>): Promise<R>;
export declare function useTransaction<T extends (ServiceConstructor | IService)[], R>(...services: [...T, (...instances: Instances<T>) => Promise<R>]): Promise<R>;
export {};
