patternjavascriptangularCritical
TypeScript TS7015: Element implicitly has an 'any' type because index expression is not of type 'number'
Viewed 0 times
typescriptts7015hasindexanyimplicitlyelementbecausenotnumber
Problem
Im getting this compilation error in my Angular 2 app:
TS7015: Element implicitly has an 'any' type because index expression is not of type 'number'.
The piece of code causing it is:
This however doesn't cause this error:
This doesn't make any sense to me. I would like to solve it when defining the attributes the first time. At the moment I'm writing:
But someone mentioned that the problem is trying to use a string type as index in an array and that I should use a map. But I'm not sure how to do that.
Thans for your help!
TS7015: Element implicitly has an 'any' type because index expression is not of type 'number'.
The piece of code causing it is:
getApplicationCount(state:string) {
return this.applicationsByState[state] ? this.applicationsByState[state].length : 0;
}This however doesn't cause this error:
getApplicationCount(state:string) {
return this.applicationsByState[state] ? this.applicationsByState[state].length : 0;
}This doesn't make any sense to me. I would like to solve it when defining the attributes the first time. At the moment I'm writing:
private applicationsByState: Array = [];But someone mentioned that the problem is trying to use a string type as index in an array and that I should use a map. But I'm not sure how to do that.
Thans for your help!
Solution
If you want a key/value data structure then don't use an array.
You can use a regular object:
Or you can use a Map:
You can use a regular object:
private applicationsByState: { [key: string]: any[] } = {};
getApplicationCount(state: string) {
return this.applicationsByState[state] ? this.applicationsByState[state].length : 0;
}Or you can use a Map:
private applicationsByState: Map = new Map();
getApplicationCount(state: string) {
return this.applicationsByState.has(state) ? this.applicationsByState.get(state).length : 0;
}Code Snippets
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;
}Context
Stack Overflow Q#40358434, score: 173
Revisions (0)
No revisions yet.