You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular自定义FormGroup校验器报TS2345类型不匹配错误如何解决?

问题原因

Angular的FormGroup构造函数接收的全局校验器类型是ValidatorFn,该类型规定校验函数的入参必须是AbstractControl类型,你自定义的passwordMatchValidator校验函数直接将入参声明为FormGroup,类型不匹配触发了TS编译报错。
另外你当前的HTML错误提示逻辑也有问题:跨字段校验产生的notmatched错误是挂载在整个表单组实例上,而非password2单个控件上,原写法无法正确触发密码不匹配的提示。

解决方案

第一步:修改自定义校验函数的类型声明

将app.component.ts中的passwordMatchValidator函数修改为如下代码:

passwordMatchValidator(control: AbstractControl){
  // 类型断言为FormGroup即可调用FormGroup的相关方法
  const fg = control as FormGroup;
  return fg.get('password')?.value === fg.get('password2')?.value ? null : {notmatched: true}
}

第二步:修改HTML中的密码不匹配提示逻辑

将密码重复输入框下方的密码不匹配提示行修改为如下代码:

<small *ngIf="exform.hasError('notmatched') && password2.touched" class="text-danger">Parola Uyuşmuyor</small>

修改完成后重新编译即可解决报错,同时密码一致性校验的提示逻辑也能正常生效。

内容的提问来源于stack exchange,提问作者Alper Yıldırım

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 06:18:04