1. ホーム
  2. javascript

[解決済み] TypeScript TS7015: インデックス式が 'number' 型でないため、要素が暗黙のうちに 'any' 型を持つ

2022-08-27 08:52:08

質問

Angular2アプリでこのコンパイルエラーが発生しました。

TS7015: index 式が '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> = [];

しかし、ある人が、問題は配列のインデックスとして文字列型を使おうとしていることであり、マップを使うべきだと言いました。しかし、私はその方法がわかりません。

助けてくれてありがとうございます。

どのように解決するのですか?

キー/バリューのデータ構造が必要な場合、配列を使用しないでください。

普通のオブジェクトを使えばいい。

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