import { TimeoutId } from '../private_utils';
export interface Poolable {
    __poolKey: string;
}
declare class ObjectPool<T extends Poolable, Ctor extends new (...args: any[]) => T> {
    /** @internal */
    _objectsByKey: {
        [key: string]: Array<T> | void;
    };
    /** @internal */
    _weakObjectsByKey: {
        [key: string]: Array<{
            object: T;
            timeoutId: TimeoutId;
        }> | void;
    };
    /** @internal */
    _Ctor: Ctor;
    /** @hidden */
    constructor(ctor: Ctor);
    /** @hidden */
    registerObjectForReuseStrong(object: T): void;
    /** @hidden */
    unregisterObjectForReuseStrong(object: T): void;
    /** @hidden */
    _registerObjectForReuseWeak(object: T): void;
    /** @internal */
    _unregisterObjectForReuseWeakIfExists(object: T): boolean;
    /** @internal */
    _getObjectForReuseStrong(key: string): T | null;
    /** @internal */
    _getObjectForReuseWeak(key: string): T | null;
    /** @hidden */
    getObjectForReuse(...args: ConstructorParameters<Ctor>): T;
}
export default ObjectPool;
