Nu se poate adăuga o metodă nouă unei clase Angular TypeScript (FormGroup)


Încerc să adaug o metodă suplimentară clasei FormGroup din Angular, care va seta starea grupului și va seta starea de eroare de la server.

Am următorul cod într-un fișier form-helper.ts în aplicația mea Angular4.

import { FormGroup } from '@angular/forms';

export interface FormGroup {
  setValueAndErrors(state: any, memberErrors: any);
}

FormGroup.prototype.setValueAndErrors = (state: any, memberErrors: any) => {
  this.setValue(state);
  // do some stuff with the memberErrors parameter
}

Dar compilatorul aruncă o eroare pe linia FormGroup.prototype.setValueAndErrors.

EROARE în C:/dev/AppName/AppName-Client/src/app/shared/utils/form-helper.ts (3,21): Proprietatea 'setValueAndErrors' nu există pe tipul 'FormGroup'.

Răspuns #1

Următorul se compilează pentru mine:

declare module "@angular/forms/src/model" {
  interface FormGroup {
    setValueAndErrors(this: FormGroup, state: any, memberErrors: any): void;
  }
}

FormGroup.prototype.setValueAndErrors = function(this: FormGroup, state: any, memberErrors: any): void {
  this.setValue(state);
}

Se pare că cheia este să folosești numele modulului care se referă la modulul/fișierul efectiv care conține FormGroup.

De asemenea, va trebui să abordezi utilizarea ta a this.

Răspunsul #2

Acest lucru a funcționat pentru versiunea mai nouă de Angular (eu folosesc 13)

declare module "@angular/forms" {
  interface FormGroup {
    setValueAndErrors(this: FormGroup, state: any, memberErrors: any): void;
  }
}

FormGroup.prototype.setValueAndErrors = function(this: FormGroup, state: any, memberErrors: any): void {
  this.setValue(state);
}