programing

형식 설명: 형식이 '개체'에 없습니다.

i4 2023. 3. 27. 21:00
반응형

형식 설명: 형식이 '개체'에 없습니다.

다음과 같은 설정이 있고, 를 사용하여 루핑할 때for...of다음 오류가 발생합니다.

유형 "object"에 속성 "country"가 없습니다.

이렇게 하면 배열 내의 각 개체를 루프하여 개체 속성 값을 비교할 수 있습니까?

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

당신은 아마allProviders라고 입력했다.object[]뿐만 아니라.그리고 재산country에 존재하지 않는다.object타이핑에 관심이 없다면 둘 다 선언할 수 있습니다.allProviders그리고.countryProviders~하듯이Array<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>;

오브젝트에 키와 값의 페어가 포함되어 있는 경우는, 다음의 인터페이스를 선언할 수 있습니다.keyable예를 들어 다음과 같습니다.

interface keyable {
    [key: string]: any  
}

다음으로 다음과 같이 사용합니다.

let countryProviders: keyable[];

또는

let countryProviders: Array<keyable>;

특정의 경우, 키 타입과 용도를 정의해 주세요.Record유틸리티를 사용하여 개체를 정의합니다.

type ProviderKey="region" | "country" | "locale" | "company"

let countryProviders: Array<Record<ProviderKey,string>>;

네, 위의 방법을 적극 권장합니다.단, 선택의 여지가 없고 오브젝트 배열로 "all Providers"를 계속 사용하려면 이 방법을 사용하십시오.이것은 인터페이스를 만들지 않고도 작동했습니다.

if(providers["country"] === "US") // replacement

언급URL : https://stackoverflow.com/questions/43338763/typescript-property-does-not-exist-on-type-object

반응형