angular - konvertera > uttrycket till 'unknown' först när du utökar FormGroup


En anpassad klass härledd från FormGroup i Angular 14:

export interface MyForm<T> extends FormGroup {
  isSaving: boolean;
  value: Required<T>;
  controls: { [key in keyof Required<T>]: FormControl<T> };
  setValue(
    value: Required<T>,
    options?: {
      onlySelf?: boolean;
      emitEvent?: boolean;
    }
  ): void;
  reset(
    value: T,
    options?: {
      onlySelf?: boolean;
      emitEvent?: boolean;
    }
  ): void;
}

En ny egenskap tillagd: isSaving

Metod för att skapa det formuläret:

export const createMyForm = <T>({
  fb,
  controls,
  options
}: {
  fb: FormBuilder;

  controls: {
    [key in keyof T]: [
      formState: T[key],
      validatorOrOpts?: ValidatorFn | ValidatorFn[] | FormControlOptions | null,
      asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null
    ];
  };
  options?: AbstractControlOptions | null;
}) => {
  // eslint-disable-next-line prefer-const

  const tt = fb.group(controls, options);
  return tt as MyForm<T>;

};

Användning i komponent:

this.myForm = createMyForm<User>({
      fb,
      controls: {
        username: ['', Validators.required],
        password: ['', Validators.required]
      },
      options: {
      }
    });

Jag får ett byggfel vid

return tt som MyForm;

i export const createMyForm kod:

Konvertering av typen 'FormGroup<{ [K in keyof { [key in keyof T]: [formState: T[key], validatorOrOpts?: ValidatorFn | FormControlOptions | ValidatorFn[] | null | undefined, asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null | undefined]; }]: ɵElement<...>; }>' till typen 'MyForm' kan vara ett misstag eftersom ingen av typerna överlappar tillräckligt med den andra. Om detta var avsiktligt, konvertera uttrycket till 'unknown' först. Egenskapen 'isSaving' saknas i typen 'FormGroup<{ [K in keyof { [key in keyof T]: [formState: T[key], validatorOrOpts?: ValidatorFn | FormControlOptions | ValidatorFn[] | null | undefined, asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null | undefined]; }]: ɵElement<...>; }>' men krävs i typen 'MyForm'.ts

Kan du dela hur man utökar FormGroup och lägger till en egen egenskap till den?

Svar #1

isSaving är inte en medlem av FormGroup, att markera isSaving som en valfri medlem borde lösa felet

export interface MyForm<T> extends FormGroup {
  isSaving?: boolean;
  value: Required<T>;
  controls: { [key in keyof Required<T>]: FormControl<T> };
  setValue(
    value: Required<T>,
    options?: {
      onlySelf?: boolean;
      emitEvent?: boolean;
    }
  ): void;
  reset(
    value: T,
    options?: {
      onlySelf?: boolean;
      emitEvent?: boolean;
    }
  ): void;
}