盡管我搜索了這個錯誤并看到了很多關于這個主題的帖子,但我仍然不知道如何修復這個錯誤。
直接來看這個例子,我的資料看起來像這樣:
const earthData = {
distanceFromSun: 149280000,
continents: {
asia: {area: 44579000, population: 4560667108},
africa: {area: 30370000, population: 1275920972},
europe: {area: 10180000, population: 746419440},
america: {area: 42549000, population: 964920000},
australia: {area: 7690000, population: 25925600},
antarctica: {area: 14200000, population: 5000}
}
}
我想創建一個新物件,其中鍵是大陸名稱,值是區域。我可以輕松地執行以下操作并且效果很好:
const outputWorks = Object.fromEntries(Object.entries(earthData.continents).map( ([k, o]) => [k, o.area] ))
// {
// "asia": 44579000,
// "africa": 30370000,
// "europe": 10180000,
// "america": 42549000,
// "australia": 7690000,
// "antarctica": 14200000
// }
相比之下,當相同的輸入資料是不同操作的結果時,非常相似的代碼不起作用。
const solarSystem = {
mercury: {},
venus: {},
earth: { // earth entry is just like `earthData` object
distanceFromSun: 149280000,
continents: {
asia: { area: 44579000, population: 4560667108 },
africa: { area: 30370000, population: 1275920972 },
europe: { area: 10180000, population: 746419440 },
america: { area: 42549000, population: 964920000 },
australia: { area: 7690000, population: 25925600 },
antarctica: { area: 14200000, population: 5000 },
},
},
mars: {},
jupiter: {},
saturn: {},
uranus: {},
neptun: {},
};
const earthDataExtracted = Object.values(solarSystem)[2] as any; // again, this is the same as `earthData`
那么為什么以下會引發錯誤?
Object.fromEntries(Object.entries(earthDataExtracted.continents).map( ([k, o]) => [k, o.area] ))
// ^
(引數)o:未知
物件的型別為“未知”。(2571)
在這里查看 TS 游樂場
更奇怪的是,在我自己的機器(VSCode)上,錯誤是不同的:
型別“未知”.ts(2339) 上不存在屬性“區域”
Is there a simple thing I'm missing here?
uj5u.com熱心網友回復:
要解決此問題,您需要提供一個型別earthDataExtracted.continents(但如果我正確理解您與@jcalz 的討論,這并不容易),或者簡單地將其宣告為any:
Object.fromEntries(Object.entries(earthDataExtracted.continents).map( ([k, o]: [string, any]) => [k, o.area] ))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/450789.html
