TypeScript报错:索引表达式非number类型致元素隐式为any类型如何解决
报错原因解释
你遇到的TypeScript报错本质由两个代码错误共同触发:
- 你定义的
errorsgetter返回值类型为Array<string>,数组类型仅支持number类型作为索引值,你在getter内部用字符串key索引数组自然触发类型不匹配报错。 - 你在getter内部写了递归调用的逻辑:你已经通过
const { errors } = this.control拿到了表单控件的验证错误对象,但后续Object.keys(this.errors)、this.errors[key]都错误引用了自身这个getter,而非表单控件的错误对象。
可行解决方案
你只需要修正errors getter的递归引用问题,补充必要的类型断言即可解决报错,修正后的完整代码如下:
// 注意先从@angular/forms导入ValidationErrors类型 import { ValidationErrors } from '@angular/forms'; // ... 其余组件代码保持不变,仅替换errors getter部分 public get errors(): Array<string> { if (!this.control || !this.control.errors) { return []; } const controlErrors: ValidationErrors = this.control.errors; return Object.keys(controlErrors).map((key) => { if (this.errorMessages.has(key)) { return this.errorMessages.get(key)!(); } return controlErrors[key] as string || key; }); }
如果不需要严格的类型检查,也可以通过修改项目tsconfig.json的配置临时屏蔽该类报错(不推荐):
{ "compilerOptions": { "suppressImplicitAnyIndexErrors": true } }
内容的提问来源于stack exchange,提问作者lynn0712
相关产品推荐
相关产品推荐

