У меня есть FormArray
, который будет содержать некоторые правила корректировки цен. Каждое правило будет содержать FormGroup
и каждое FormGroup
с 4 FormControl
s. Когда я пытаюсь вставить FormGroup
в FormArray
, получаю эту ошибку:
Аргумент типа «Группа форм» не может быть присвоен параметру типа «никогда».
public rules = new FormArray([]);
private getRuleFormGroup(): FormGroup {
return this._formBuilder.group({
from: new FormControl('', {
nonNullable: true,
validators: [Validators.required]
}),
to: new FormControl('', {
nonNullable: true,
validators: [Validators.required]
}),
increaseBy: new FormControl('', {
nonNullable: true,
validators: [Validators.required]
}),
increaseType: new FormControl('', {
nonNullable: true,
validators: [Validators.required]
})
});
}
private addNewRule(): void {
const group = this.getRuleFormGroup();
this.rules.push(group); //Getting error here
}
Попробуйте указать общий аргумент: public rules = new FormArray<FormGroup<any>>([])
пытаться:
this.rules.controls.push(group);
Точно так же, как FormGroups организуются в элементы управления, FormArrays также делают это, каждый элемент управления является либо FormGroup, либо свободным FormControl.
Вы получаете указанную ошибку, поскольку реактивные формы строго типизированы по умолчанию из Angular 14.
Чтобы решить ошибку компилятора:
Создайте тип для FormGroup
.
Укажите тип rules
как FormArray<FormGroup<RuleForm>>
.
Измените подпись getRuleFormGroup
, чтобы вернуть тип FormGroup<RuleForm>
.
interface RuleForm {
from: FormControl<string>;
to: FormControl<string>;
increaseBy: FormControl<string>;
increaseType: FormControl<string>;
}
public rules: FormArray<FormGroup<RuleForm>> = new FormArray<
FormGroup<RuleForm>
>([]);
private getRuleFormGroup(): FormGroup<RuleForm> {
...
}
Оба ответа работают. Я отмечаю ответ @GheistLycis как правильный.
Вы получаете сообщение об ошибке в консоли или в CLI?