TypeScript TS7015: インデックス式が 'number' 型ではないため、要素は暗黙的に 'any' 型を持ちます 質問する

TypeScript TS7015: インデックス式が 'number' 型ではないため、要素は暗黙的に 'any' 型を持ちます 質問する

Angular 2 アプリで次のコンパイル エラーが発生します:

TS7015: インデックス式が 'number' 型ではないため、要素は暗黙的に 'any' 型を持ちます。

原因となっているコードは次のとおりです。

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;
}

おすすめ記事