2017-04-11 2 views
4

다음 설정을 가지고 있고 for...of을 사용하여 반복하고 속성 "country"가 "object"유형에 존재하지 않습니다. 배열의 각 객체를 반복하고 객체 속성 값을 비교하는 올바른 방법입니까?속성이 'object'유형에 존재하지 않습니다.

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 속성이 없습니다.

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

Love it! 고정 유형 검사 솔루션을 찾고 있습니다. 감사합니다 @ Saravana :) –

+0

왜 인터페이스 대신 클래스를 사용하지 않았습니까? –

+1

@RafaelReyes 개체에 컴파일 타임 형식 검사 만 있으면 인터페이스를 사용할 수 있습니다 (빌드 중에 인터페이스가 지워지고 생성 된 JS에는 영향을주지 않음). 그러나 클래스는 JS로 변환됩니다. 이 질문을 토대로 수업을 만들 필요가 없었습니다. – Saravana

관련 문제