Búsqueda de sitios web

No se puede agregar un nuevo método a una clase de Angular TypeScript (FormGroup)


Estoy intentando añadir un método adicional a la clase FormGroup de Angular que establecerá el estado del grupo y establecerá el estado de error desde el servidor.

Tengo el siguiente código en un archivo form-helper.ts en mi aplicación 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
}

Pero el compilador lanza un error en la línea FormGroup.prototype.setValueAndErrors.

ERROR en C:/dev/AppName/AppName-Client/src/app/shared/utils/form-helper.ts (3,21): La propiedad 'setValueAndErrors' no existe en el tipo 'FormGroup'.

Respuesta #1

Lo siguiente se compila para mí:

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);
}

La clave parece ser usar el nombre del módulo que se refiere al módulo/archivo real que contiene el FormGroup.

Además, necesitarás abordar tu uso de this.

Respuesta #2

Esto funcionó para la versión más reciente de Angular (estoy usando la 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);
}

Artículos relacionados