如何修复类型'"电子邮件"'不能分配给' string []'类型的参数。错误?

时间:2018-03-30 03:34:43

标签: angular angular5 angular-reactive-forms

Angular 5应用程序运行正常但我在使用生产构建它时遇到以下错误。它也可以使用ng build构建,但不能使用ng build --prod

  

类型'"电子邮件"'不能分配给类型的参数   '串[]'

行上的代码:

<mat-form-field>
  <input matInput placeholder="Email" formControlName="email" required>
  <mat-error *ngIf="form.hasError('email', 'email') && !form.hasError('required', 'email')">
    Please enter a valid email address
  </mat-error>
  <mat-error *ngIf="form.hasError('required', 'email')">
    Email is <strong>required</strong>
  </mat-error>
</mat-form-field>

并形成:

private createForm() {
  this.form = new FormGroup({
    email: new FormControl('', [Validators.required, Validators.email]),
    password: new FormControl('', Validators.required)
  });
}

1 个答案:

答案 0 :(得分:5)

我认为您需要根据Angular的源代码(line 520-526)将第二个'email'参数包装在一个数组中:

/**
 * Returns true if the control with the given path has the error specified. Otherwise
 * returns false.
 *
 * If no path is given, it checks for the error on the present control.
 */
hasError(errorCode: string, path?: string[]): boolean  { return !!this.getError(errorCode, path); }

我认为它在你的常规版本中实际工作的原因是因为虽然它在技术上是无效的,但最终执行的代码有一个接受Array<string|number> | stringline 37-56)的调用签名。

function _find(control: AbstractControl, path: Array<string|number>| string, delimiter: string) {
    ...
}

注意:您的模板不会在非AOT模式下通过打字系统运行,因此在您进行--prod构建之前不会弹出。