import { BehaviorSubject } from 'rxjs';
import { BasicModel } from './basic';
import { ValidateOption } from '../validate';
import { FIELD_ID } from './is';
import type { FieldBuilder } from '../builders';
export interface INormalizeBeforeSubmit<A, B> {
    (a: A): B;
}
declare class FieldModel<Value> extends BasicModel<Value> {
    private readonly defaultValue;
    [FIELD_ID]: boolean;
    protected readonly _displayName = "FieldModel";
    readonly _value$: BehaviorSubject<Value>;
    readonly _valid$: BehaviorSubject<boolean>;
    readonly builder?: FieldBuilder<Value>;
    isTouched: boolean;
    isCompositing: boolean;
    normalizeBeforeSubmit: INormalizeBeforeSubmit<Value, any>;
    owner: BasicModel<any> | null;
    constructor(defaultValue: Value);
    get value$(): BehaviorSubject<Value>;
    get valid$(): BehaviorSubject<boolean>;
    _getValue$(): BehaviorSubject<Value>;
    _getValid$(): BehaviorSubject<boolean>;
    reset(): void;
    clear(): void;
    clearError(): void;
    initialize(value: Value): void;
    getRawValue(): Value;
    getSubmitValue(): any;
    validate(option?: ValidateOption): Promise<import("../validate").IValidateResult<Value>>;
    patchValue(value: Value): void;
    pristine(): boolean;
    dirty(): boolean;
    touched(): boolean;
    dispose(): void;
}
export { FieldModel };
