import { Observable } from './observable';
import { LoadPriority, Store, Identifiable } from '../store/store';
export interface PersistedOpts {
    tableName: string;
}
export type PersistedModel<T> = {
    status: 'loading';
    data: T;
} | {
    status: 'loaded';
    data: T;
} | {
    status: 'error';
    data: T;
    error: Error;
};
interface Storable {
}
export declare function persistedObservable(options: PersistedOpts): <T extends new (...args: any[]) => Storable>(constructor: T) => {
    new (...args: any[]): {};
    tableName: string;
} & T;
export declare class PersistedObservable<T extends Identifiable> extends Observable<PersistedModel<T>> implements Storable {
    protected tableName: string;
    protected readonly store: Store;
    protected readonly loadPriority: LoadPriority;
    constructor(initialValue: T, store: Store, loadPriority?: LoadPriority);
    protected load(): void;
    get value(): PersistedModel<T>;
    setValue(_newValue: PersistedModel<T>): void;
    get data(): T;
    setData(newDataPartial: Partial<T>): void;
    protected onLoaded(): void;
    protected onSaved(): void;
}
export {};
//# sourceMappingURL=persistedObservable.d.ts.map