2017-04-11 11 views
4

私は以下のような設定をしています。for...ofをループし、プロパティ "country"のエラーが発生しました。タイプ "object"に存在しません。これは配列内の各オブジェクトをループし、オブジェクトのプロパティ値を比較する正しい方法ですか?プロパティがオブジェクト 'type'に存在しません

let countryProviders: object[]; 

export function GetAllProviders() { 
    allProviders = [ 
     { region: "r 1", country: "US", locale: "en-us", company: "co 1" }, 
     { region: "r 2", country: "China", locale: "zh-cn", company: "co 2" }, 
     { region: "r 4", country: "Korea", locale: "ko-kr", company: "co 4" }, 
     { region: "r 5", country: "Japan", locale: "ja-jp", company: "co 5" } 
    ] 

    for (let providers of allProviders) { 
     if (providers.country === "US") { // error here 
     countryProviders.push(providers); 
     } 
    } 
} 

答えて

9

はおそらくallProvidersが同様object[]として入力しました。プロパティcountryobjectには存在しません。

let countryProviders: Array<any>; 
let allProviders: Array<any>; 

したいならば、静的型チェック:あなたがタイピングを気にしない場合は、両方のallProviderscountryProvidersArray<any>などを宣言することができます。構造体のインタフェースを作成して使用することができます。

interface Provider { 
    region: string, 
    country: string, 
    locale: string, 
    company: string 
} 

let countryProviders: Array<Provider>; 
let allProviders: Array<Provider>; 
+0

私は静的型チェックの解決策を探しています。ありがとう@サラバナ:) –

+0

なぜインターフェイスの代わりにクラスを使用していないのですか? –

+1

@RafaelReyesオブジェクトにコンパイル時の型チェックが必要な場合は、インターフェイスを使用できます(ビルド中にインターフェイスが消去され、生成されたJSには影響しません)。しかし、クラスはJSに変換されます。この質問に基づいて、クラスを作成する必要はありませんでした。 – Saravana

関連する問題