export type WorkerType<Input, Output> = {
    Input: Input;
    Output: Output;
};
export type WorkerCallback<T extends WorkerType<any, any>> = (input: T['Input']) => Promise<{
    output: T['Output'];
    transfer: Transferable[];
}>;
export declare function defineWorker<T extends WorkerType<any, any>>(callback: WorkerCallback<T>): void;
export type WorkerCreator = (workId: number) => Worker;
export declare class WorkerPool<T extends WorkerType<any, any>> {
    private disposed;
    private pool;
    private queue;
    private workers;
    private workerResolvers;
    private workerStatus;
    private workerCreator;
    constructor(workerCreator: WorkerCreator | null, pool: number);
    setWorkerCreator(workerCreator: WorkerCreator): void;
    private initWorker;
    private getIdleWorker;
    private onMessage;
    postMessage(input: T['Input'], transfer?: Transferable[]): Promise<T['Output']>;
    dispose(): void;
}
