Angular 2- 错误:“AbstractControl”类型不能分配给“AbstractControl”类型

A J*_*shi 5 angular2-forms angular

我正在使用 angular rc4 版本来编写一个应用程序,在该应用程序中我必须强加一些验证规则来形成组件,例如requiredminlength以及一些自定义验证器emailValidator

当我将一个内置验证器和一个自定义验证器传递给该Validators.compose函数时,IDE(Webstorm 和 VS Code)向我显示编译时错误消息,如下所示:

在此处输入图片说明

但是,您可以在上面的屏幕截图中看到,如果内置了两个验证器,则没有错误消息。

我的自定义验证器的定义如下:

static emailValidator(control: AbstractControl): {[key: string]: boolean} {
    if (control.value.match(/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/)) {
      return null;
    } else {
      return {'invalidEmailAddress': true };
    }
}
Run Code Online (Sandbox Code Playgroud)

A J*_*shi 1

我通过将参数类型controlAbstractControlto替换为解决了该问题Control,如下所示:

static emailValidator(control: Control): {[key: string]: boolean} {
    if (control.value.match(/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/)) {
      return null;
    } else {
      return {'invalidEmailAddress': true };
    }
}
Run Code Online (Sandbox Code Playgroud)

Control类延伸自AbstractControl. 我仍然不明白为什么当我使用FormControl或 时会收到此错误消息AbstractControl