export interface CacheEntry<T> {
    t: number;
    value: T;
}
export declare class Cache<T> {
    method: (key: string) => Promise<T>;
    ttl: number;
    evictionTime: number;
    gcPeriod: number;
    maxEntries: number;
    private entries;
    map: Map<string, CacheEntry<T>>;
    private timer;
    constructor(method?: (key: string) => Promise<T>);
    put(key: string, value: T): void;
    getFromSource(key: string): Promise<T>;
    get(key: string): Promise<T>;
    getSync(key: string): T | null;
    exists(key: string): boolean;
    scheduleGC(): void;
    startGC(): void;
    runGC: () => void;
    stopGC: () => void;
    retire(key: string, newTime?: number): boolean;
    remove(key: string): boolean;
}