import type { FieldMetadata, FieldOptions } from "./types";
import type { ModelInstance } from "../../model/core/types";
import { BOUND_FIELD_METADATA, BOUND_FIELD_OPTIONS } from "../../constants";
import { VerveErrorList } from "../../errors";
import { Field } from "./Field";
export interface BoundField<T> {
    get(): T;
    unsafeGet(): T | undefined;
    set(value: T): void;
    unset(): void;
    is(value: T): boolean;
    isEmpty(): boolean;
    isPresent(): boolean;
    isValid(): boolean;
    generate(): void;
    compute(): T;
    validate(): VerveErrorList;
    isReadable(): boolean;
    isWritable(): boolean;
    [BOUND_FIELD_METADATA]: FieldMetadata;
    [BOUND_FIELD_OPTIONS]: FieldOptions;
}
export declare abstract class BoundField<T> {
    metadata: FieldMetadata;
    options: FieldOptions;
    constructor(metadata: FieldMetadata, options?: FieldOptions);
    static toBoundField<T>(model: ModelInstance, fieldName: string, field: Field<T>): BoundField<T>;
}
//# sourceMappingURL=BoundField.d.ts.map