我正在尝试使 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;
}
提前致谢
答案 0 :(得分:0)
很明显会出错。
<块引用>AbstractControl
是 FormGroup
FormArray
和 FormControl
扩展的基类。
FormGroup
和 FormArray
定义了 control
,它在 FormControl
和 AbstractControl
中不可用。
根据角度定义,如果说 form
是 FormArray
类型,那么 formControls()
必须返回 AbstractControl[]
get formControls(): AbstractControl[] {
return this.form.controls;
}
但是,如果 form
是 FormGroup
,那么您提到的返回类型就可以了
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;
}