如何在 Angular 中正确使用 FormArray 类型

Rap*_*let 2 types typescript angular formarray formgroups

我应该如何声明这个类型?

假设我有一个FormGroup

  1. 我在构造函数中实例化它。
export interface MyType {
 myValue: string
}
Run Code Online (Sandbox Code Playgroud)
myForm: FormGroup
myArray: FormArray // <FormControl<MyType>>

constructor(private _formBuilder: FormBuilder) {
  myForm = new FormGroup({
    myArray: this._formBuilder.array([])
  })
}
Run Code Online (Sandbox Code Playgroud)
  1. 因为我在某个地方有一个按钮可以让我向数组添加新元素,所以我执行以下操作
addElement() {
  this.myArray = this.myForm.get('myArray') as unknown as FormArray

  this.myArray.push(this.newElement())
}

private _newElement(): FormGroup { // What type to use ? 
  return this._formBuilder.group({
     myValue: ''
  })
}
Run Code Online (Sandbox Code Playgroud)

但是当我使用

myArray: FormArray<FormControl<MyType>>
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

Argument of type 'FormGroup<any>' is not assignable to parameter of type 'FormControl<MyType>'.
  Type 'FormGroup<any>' is missing the following properties from type 'FormControl<MyType>': defaultValue, registerOnChange, registerOnDisabledChange
Run Code Online (Sandbox Code Playgroud)

有人知道

  • 我应该在这里选择哪种类型private _newElement(): FormGroup { // What type to use ?
  • 它是否正确myArray: FormArray<FormControl<MyType>>->FormGroup<FormControl<MyType>>不正确

Yon*_*hun 5

  1. 声明类型化表单的接口/类。
export class MyTypeForm {
  myValue: FormControl<string>;
}
Run Code Online (Sandbox Code Playgroud)
  1. myArray类型声明为FormArray<FormGroup<MyTypeForm>>.
myArray: FormArray<FormGroup<MyTypeForm>>;
Run Code Online (Sandbox Code Playgroud)
  1. _newElement返回类型的方法FormGroup<MyTypeForm>
private _newElement(): FormGroup<MyTypeForm> {
  return this._formBuilder.group<MyTypeForm>({
    myValue: this._formBuilder.control(''),
  });
}
Run Code Online (Sandbox Code Playgroud)

演示@StackBlitz

参考:Angular 严格类型表单(完整指南)

  • 您可以创建通用接口,将每个属性定义为 FormControl,例如“导出类型 FormControlType&lt;T&gt; = {[key in keyof T]: FormControl&lt;T[key]&gt;}”。但它并不总是可用,即如果某个属性是对象,它将用对象定义 FormControl 作为值(并且没问题),但也许您想要嵌套的 FormGroup。 (2认同)