import { EventEmitter, Injector, OnDestroy, OnInit } from "@angular/core";
import { FormControl, FormGroup, NgModel } from "@angular/forms";
import { Observable } from "rxjs/Rx";
import { ValidatorArray } from "../Validation/validate";
import { BaseValueAccessor } from "../ValueAccessor/BaseValueAccessor";
export declare abstract class NgFormControl<T> extends BaseValueAccessor<T> implements OnInit, OnDestroy {
    injector: Injector;
    shouldValidate: boolean;
    abstract name: string;
    abstract label: string;
    abstract disabled: boolean;
    abstract required: boolean;
    requiredChange: EventEmitter<boolean>;
    disabledChange: EventEmitter<boolean>;
    onDestroy$: EventEmitter<any>;
    initialized: boolean;
    initializedChange: EventEmitter<boolean>;
    additionalValidators: any[];
    model: NgModel;
    parentFormControl: FormControl;
    parentFormGroup: FormGroup;
    validators: ValidatorArray;
    control: FormControl;
    constructor(injector: Injector);
    ngOnDestroy(): void;
    ngOnInit(): void;
    setupControl(): void;
    startValidating(): void;
    validateOnInterval(): void;
    touch(): void;
    validate(): void;
    isInvalid$(): Observable<boolean>;
    isTouched(): boolean;
    readonly failures: {
        [key: string]: any;
    };
    readonly failures$: Observable<{
        [key: string]: any;
    }>;
    readonly invalid$: Observable<boolean>;
    readonly touched$: Observable<boolean>;
    readonly invalid: boolean;
    protected triggerValidation(): void;
    onLoad(): void;
}
