Угловой: ng build --prod производит аргумент типа 'AbstractControl' не может быть назначен параметру типа 'FormGroup'

По какой-то причине у меня ломается куча вещей, когда я создаю свой проект angular в продакшене, который отлично работал в dev. Все они почти одинаковы, поэтому я проиллюстрирую их одним примером.

У меня есть форма, в которой в конце каждого раздела есть кнопка, которая проверяет действительность конкретной FormGroup следующим образом:

<button md-button color="primary" (click)="checkValidity(changeForm.get('changeOverviewFG'))">Check</button>

И функция выглядит так в моем классе компонентов.

  checkValidity(g: FormGroup) {
    Object.keys(g.controls).forEach(key => {
      g.get(key).markAsDirty();
    });
    Object.keys(g.controls).forEach(key => {
      g.get(key).markAsTouched();
    });
    Object.keys(g.controls).forEach(key => {
      g.get(key).updateValueAndValidity();
    });
  }

Когда я встраиваю его в dev, все работает нормально и работает так, как задумано. Но когда я пытаюсь собрать его с помощью --prod, я получаю следующую ошибку

Аргумент типа «AbstractControl» не может быть назначен параметру типа «FormGroup».

Так вдруг он пытается прочитать FormGroup как абстрактный элемент управления в производственной среде? В любом случае в моем шаблоне у меня довольно много экземпляров, которые получают этот тип ошибки, поэтому, если возможно, исправление было бы предпочтительнее в классе компонентов.

Есть ли способ явно указать AbstractControl как FormGroup (я нигде не нашел, что это возможно) или есть другой простой способ решить эту проблему?

https://github.com/angular/angular/issues/10192 https://github.com/angular/angular-cli/issues/6099

Это были две ссылки, которые наиболее близко подошли к моей проблеме, но представленные там решения ко мне не подходят.


person David    schedule 02.11.2017    source источник


Ответы (1)


Я получил работу в prod, передав объекты вместо FormGroups или FormControls, а затем применив их после этого. В случае своего вопроса я изменил его на следующее.

checkValidity(h: Object) {
  const g = <FormGroup>h;
  Object.keys(g.controls).forEach(key => {
    g.get(key).markAsDirty();
  });
  Object.keys(g.controls).forEach(key => {
    g.get(key).markAsTouched();
  });
  Object.keys(g.controls).forEach(key => {
    g.get(key).updateValueAndValidity();
  });
}

Большое спасибо анонимному голосованию против без обратной связи! Я уверен, что это определенно вписывается в культуру этого сайта.

person David    schedule 08.11.2017