2017-04-11 110 views
4

我有以下设置,当我循环使用for...of并得到属性“国家”的错误在类型“对象”上不存在。这是循环访问数组中的每个对象并比较对象属性值的正确方法吗?属性不存在类型'对象'

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[]为好。 object上不存在房产country。如果你不关心打字,你可以同时声明allProviderscountryProvidersArray<any>

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

如果你想静态类型检查。您可以为结构创建接口并使用它:

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

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

喜欢它!我正在寻找静态类型检查解决方案。谢谢@Saravana :) –

+0

为什么你没有使用类而不是接口? –

+1

@RafaelReyes如果你需要的只是编译时检查你的对象类型,你可以使用接口(接口在构建过程中被擦除,不影响生成的JS)。但是,类会转换为JS。基于这个问题,不需要创建一个类。 – Saravana

相关问题