TypeScript TS7015:元素隐式具有“any”类型,因为索引表达式不是“number”类型

2022-08-30 04:29:14

我在我的Angular 2应用程序中收到此编译错误:

TS7015:元素隐式具有“any”类型,因为索引表达式不是“number”类型。

导致它的代码段是:

getApplicationCount(state:string) {
    return this.applicationsByState[state] ? this.applicationsByState[state].length : 0;
  }

但是,这不会导致此错误:

getApplicationCount(state:string) {
    return this.applicationsByState[<any>state] ? this.applicationsByState[<any>state].length : 0;
  }

这对我来说没有任何意义。我想在第一次定义属性时解决它。目前我正在写:

private applicationsByState: Array<any> = [];

但是有人提到,问题是尝试使用字符串类型作为数组中的索引,并且我应该使用映射。但我不知道该怎么做。

感谢你的帮助!


答案 1

如果你想要一个键/值数据结构,那么不要使用数组。

您可以使用常规对象:

private applicationsByState: { [key: string]: any[] } = {};

getApplicationCount(state: string) {
    return this.applicationsByState[state] ? this.applicationsByState[state].length : 0;
}

或者,您可以使用地图

private applicationsByState: Map<string, any[]> = new Map<string, any[]>();

getApplicationCount(state: string) {
    return this.applicationsByState.has(state) ? this.applicationsByState.get(state).length : 0;
}

答案 2

不是OP的直接问题,但对于因库不受其控制而遇到此错误的用户,可以通过添加以下内容来抑制此错误:

{
  ...
  "suppressImplicitAnyIndexErrors": true,
  ...
}

添加到该文件。tsconfig.json