Ik heb de volgopstelling en wanneer ik door het gebruik van for...of
en een foutmelding krijgen van:
Property “Land” bestaat niet op Type “Object”.
is dit een juiste manier om door elk object in de array te lopen en de eigenschap van het object Property te vergelijken?
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);
}
}
}
Antwoord 1, Autoriteit 100%
U hebt waarschijnlijk allProviders
getypt als object[]
ook. En eigendom country
bestaat niet op object
. Als u niet om het typen wilt, kunt u zowel allProviders
en countryProviders
als Array<any>
:
let countryProviders: Array<any>;
let allProviders: Array<any>;
Als u een statische typecontrole wilt. U kunt een interface voor de structuur maken en deze gebruiken:
interface Provider {
region: string,
country: string,
locale: string,
company: string
}
let countryProviders: Array<Provider>;
let allProviders: Array<Provider>;
Antwoord 2, autoriteit 17%
Als je object sleutel/waarde-paren zou kunnen bevatten, zou je een interface kunnen declareren met de naam keyable
zoals :
interface keyable {
[key: string]: any
}
gebruik het dan als volgt:
let countryProviders: keyable[];
of
let countryProviders: Array<keyable>;
Probeer voor uw specifieke geval het sleuteltype te definiëren en gebruik het hulpprogramma Record
om het object te definiëren:
type ProviderKey="region" | "country" | "locale" | "company"
let countryProviders: Array<Record<ProviderKey,string>>;
Antwoord 3
Ja, de bovenstaande methoden worden sterk aanbevolen, maar als je geen keus hebt en “allProviders” wilt blijven gebruiken als een array van objecten, ga dan voor deze methode. Dit werkte voor mij zonder een interface te maken.
if(providers["country"] === "US") // replacement