import { BehaviorSubject, Subject } from 'rxjs';
import { IMaybeError, IValidation, IValidators, ValidateOption } from '../validate';
import { Maybe } from '../maybe';
import { IModel } from './base';
import { MODEL_ID } from './is';
declare abstract class BasicModel<Value> implements IModel<Value> {
    readonly id: string;
    protected abstract _displayName: string;
    readonly validate$: Subject<IValidation>;
    validators: IValidators<Value>;
    initialValue: Maybe<Value>;
    destroyOnUnmount: boolean;
    private subscriptions;
    abstract owner: IModel<any> | null;
    [MODEL_ID]: boolean;
    abstract getRawValue(): Value;
    abstract getSubmitValue(): any;
    readonly error$: BehaviorSubject<import("../validate").IValidateResult<Value>>;
    abstract get valid$(): BehaviorSubject<boolean>;
    abstract get value$(): BehaviorSubject<Value>;
    abstract _getValue$(shouldWarn?: boolean): BehaviorSubject<Value>;
    abstract _getValid$(shouldWarn?: boolean): BehaviorSubject<boolean>;
    get value(): Value;
    set value(value: Value);
    get form(): import("./form").FormModel<import("..").UnknownFieldSetModelChildren>;
    protected constructor(id: string);
    abstract pristine(): boolean;
    abstract touched(): boolean;
    abstract dirty(): boolean;
    abstract patchValue(value: Value): void;
    abstract reset(): void;
    abstract clear(): void;
    abstract clearError(): void;
    abstract initialize(value: Value): void;
    abstract validate(option?: ValidateOption): Promise<any>;
    dispose(): void;
    valid(): boolean;
    protected triggerValidate(option: ValidateOption): Promise<import("../validate").IValidateResult<Value>>;
    get error(): IMaybeError<Value>;
    set error(error: IMaybeError<Value>);
}
export { BasicModel };
