我在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> = [];

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

谢谢你的帮助!

推荐答案

如果需要键/值数据 struct ,那么不要使用array.

可以使用常规对象:

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

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

或者你可以使用a Map:

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

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

Typescript相关问答推荐

如何使用Generics保留构造函数的类型信息?

Typescript:将内部函数参数推断为子对象键的类型

TypScript如何在 struct 上定义基元类型?

即使子网是公共的,AWS CDK EventBridge ECS任务也无法分配公共IP地址

如何使类型只能有来自另一个类型的键,但键可以有一个新值,新键应该抛出一个错误

Redux—Toolkit查询仅在不为空的情况下添加参数

将对象属性转换为InstanceType或原样的强类型方法

如何设置绝对路径和相对路径的类型?

对数组或REST参数中的多个函数的S参数进行类型判断

对扩展某种类型的属性子集进行操作的函数

如何在Angular 12中创建DisplayBlock组件?

适当限制泛型函数中的记录

一个打字类型可以实现一个接口吗?

Fp-ts使用任务的最佳方法包装选项

有没有可能创建一种类型,强制在TypeScrip中返回`tyPeof`语句?

Typescript 中相同类型的不同结果

声明遵循映射类型的接口

棱角分明-什么是...接口类型<;T>;扩展函数{new(...args:any[]):t;}...卑鄙?

如何在Type脚本中创建一个只接受两个对象之间具有相同值类型的键的接口?

带有';的类型脚本嵌套对象可选属性错误满足';