Angular8中为子FormGroup添加控件时触发TS2339错误求助
解决Angular 8中FormGroup添加子控件时的TS2339错误
嘿,我遇到过完全一样的问题!这个报错的原因很明确:当你通过this.testForm.controls['people']获取控件时,TypeScript把它推断成了AbstractControl类型——这是所有表单控件的基类,但addControl方法是FormGroup独有的,所以编译器找不到这个方法。
下面给你三种可行的解决方案:
方案1:类型断言(最直接的写法)
直接告诉TypeScript,这个AbstractControl其实是一个FormGroup:
(this.testForm.controls['people'] as FormGroup).addControl('numbers', new FormGroup({ number: new FormControl('1234') }));
方案2:结合get方法和类型断言
用get()方法获取控件,同样加上类型断言,代码更简洁一点:
(this.testForm.get('people') as FormGroup).addControl('numbers', new FormGroup({ number: new FormControl('1234') }));
方案3:提前引用FormGroup实例(最清晰的写法)
如果你的表单结构比较复杂,提前把子FormGroup存成变量,后续操作会更直观,也不用每次都断言:
// 先创建people子表单 const peopleFormGroup = new FormGroup({}); // 初始化主表单时传入这个实例 this.testForm = new FormGroup({ id: new FormControl(0), people: peopleFormGroup, }); // 直接调用addControl即可 peopleFormGroup.addControl('numbers', new FormGroup({ number: new FormControl('1234') }));
本质上这三种方法都是让TypeScript明确知道你操作的控件是FormGroup类型,这样就能顺利调用addControl方法啦。
内容的提问来源于stack exchange,提问作者user3346776
相关产品推荐
相关产品推荐

