FormControl 类型 angular 抽象类型打字稿

时间:2021-05-11 08:21:12

标签: angular typescript

我正在尝试使 tslint 成为正确的返回类型,并且有这样的东西

 get formControls(): any {
    return this.form.controls;
  }

它返回错误 'any' 的类型声明失去了类型安全性。考虑用更精确的类型替换它。

在上一个问题中 FormControl type angular typescript 我得到了我的问题的答案,使它像这样

 get formControls(): { [key: string]: AbstractControl } {
    return this.form.controls;
  }

现在可以了,但是组件内部的其他功能出现问题,因为我有更多这样的功能

  get addressFormControls(): any {
    return this.formControls.address.controls;
  }

  get addressFormGroup(): any {
    return this.formControls.address;
  }

现在我遇到另一个错误属性“控件”在类型“AbstractControl”上不存在

这是我的最终代码,谁能帮我编写正确的返回类型

  get formControls(): { [key: string]: AbstractControl } {
    return this.form.controls;
  }

  get addressFormControls(): any {
    return this.formControls.address.controls;
  }

  get addressFormGroup(): any {
    return this.formControls.address;
  }

提前致谢

1 个答案:

答案 0 :(得分:0)

很明显会出错。

<块引用>

AbstractControlFormGroup FormArrayFormControl 扩展的基类。

FormGroupFormArray 定义了 control,它在 FormControlAbstractControl 中不可用。

根据角度定义,如果说 formFormArray 类型,那么 formControls() 必须返回 AbstractControl[]

get formControls(): AbstractControl[] {
  return this.form.controls;
}

但是,如果 formFormGroup,那么您提到的返回类型就可以了

get formControls(): { [key: string]: AbstractControl } {
  return this.form.controls;
}

但是由于 AbstractControl 没有定义 controls,我们可以手动将其类型转换为 FormGroup。所以在这种情况下,这将解决问题。

get addressFormControls(): { [key: string]: AbstractControl } {
  return (this.formControls.address as FormGroup).controls;
}

get addressFormGroup(): FormGroup {
  return this.formControls.address as FormGroup;
}

更新:我建议重构为

get addressFormControls(): { [key: string]: AbstractControl } {
  return this.addressFormGroup.controls;
}