Typescript : 属性在类型'object'上不存在

2022-08-30 05:07:35

我有以下设置,当我循环使用并得到错误: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);
      }
   }
}

答案 1

您可能也键入了。并且 属性在 上不存在。如果您不关心键入,则可以将 和 声明为 :allProvidersobject[]countryobjectallProviderscountryProvidersArray<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>;

答案 2

如果您的对象包含任何键/值对,则可以声明一个名为: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>>;