import { AbstractControl } from "./Form.types";
import { FormArray } from "./FormArray";
import { FormControl } from "./FormControl";
import { ObservableControl } from "./ObservableControl";
export declare class FormGroup<FormValues extends Record<string, unknown>> extends ObservableControl<FormValues> implements AbstractControl<FormValues> {
    private readonly controls;
    constructor(controls: {
        [Field in keyof FormValues]: AbstractControl<FormValues[Field]>;
    });
    get<Field extends keyof FormValues>(fieldName: Field): FormValues[Field] extends Array<infer ElementType> ? FormArray<ElementType> : FormValues[Field] extends Record<string, unknown> ? FormGroup<FormValues[Field]> : FormControl<FormValues[Field]>;
    get value(): FormValues;
    get valid(): boolean;
    validate(): void;
    markAllAsTouched(): void;
}
