web-dev-qa-db-fra.com

TypeScript TS7015: l'élément a implicitement un type 'any' car l'expression d'index n'est pas de type 'number'

Je reçois cette erreur de compilation dans mon Angular 2 app:

TS7015: Element implicitly has an 'any' type because index expression is not of type 'number'.

Le morceau de code qui le provoque est:

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

Cela ne provoque cependant pas cette erreur:

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

Cela n'a aucun sens pour moi. Je voudrais le résoudre lors de la première définition des attributs. En ce moment j'écris:

private applicationsByState: Array<any> = [];

Mais quelqu'un a mentionné que le problème essayait d'utiliser un type de chaîne comme index dans un tableau et que je devais utiliser une carte. Mais je ne sais pas comment faire ça.

Merci pour votre aide!

15
Ole Spaarmann

Si vous voulez une structure de données clé/valeur, n'utilisez pas de tableau.

Vous pouvez utiliser un objet normal:

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

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

Ou vous pouvez utiliser ne carte :

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

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

Je l'ai utilisé pour le contourner afin de pouvoir utiliser l'objet window.

//in js code somewhere
window.DataManager = "My Data Manager";


//in strict TypeScript file
let test = (window as { [key: string]: any })["DataManager"] as string;
console.log(test); //output= My Data Manager
3
Dave ت Maher

Une autre approche pour supprimer cette erreur consiste à ajouter:

"suppressImplicitAnyIndexErrors": true,

dans le fichier tsconfig.json.

2
Robert Brisita