import { Observable, Observer } from 'rxjs';
import { State } from './state';
import { KeyFunc, ListChanges } from './types/keyed-lists';
import { Change } from './types/changes';
export declare class KeyedState<T> extends Observable<T[] | undefined> implements Observer<T[] | undefined> {
    readonly state: State<T[]>;
    readonly keyfunc: KeyFunc<T>;
    private _changes;
    private _changesub;
    private _watcher;
    private _value;
    constructor(state: State<T[]>, keyfunc: KeyFunc<T>);
    next(t: T[] | undefined): void;
    error(err: any): void;
    complete(): void;
    get value(): T[];
    set value(t: T[]);
    key(key: number | string): State<T>;
    keyDownstream(key: number | string, current: () => T | undefined): Observable<{
        value: T;
        trace: any;
    }>;
    keyUpstream(key: number | string): Observer<Change<T>>;
    index(key: number | string): Observable<number>;
    changes(): Observable<ListChanges<T>>;
}
export declare function keyed<T>(state: State<T[]>, keyfunc: KeyFunc<T>): KeyedState<T>;
