typescript 角React表单-将FormGroup推入FormArray

t9eec4r0  于 2022-12-30  发布在  TypeScript
关注(0)|答案(2)|浏览(159)

我有一个FormArray,其中包含一些价格调整规则。每个规则将包含一个FormGroup,每个FormGroup包含4个FormControl。当我尝试将FormGroup推入FormArray时,出现此错误:
"FormGroup"类型的参数不能赋给"never"类型的参数。

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
}
uurv41yg

uurv41yg1#

尝试:

this.rules.controls.push(group);

就像FormGroup将自己组织成控件一样,FormArrays也是如此,每个控件要么是一个FormGroup,要么是一个松散的FormControl。

rqqzpn5f

rqqzpn5f2#

您会得到上述错误,因为React形式是严格的类型默认从角14。
要解决编译器错误:
1.为FormGroup创建类型。
1.将rules类型指定为FormArray<FormGroup<RuleForm>>
1.修改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> {
  ...
}

相关问题