UYOU
2022-06-16 15:45:13
我對 Flow 很陌生,我可能在這里遺漏了一些非?;镜臇|西。我有一個特定格式的對象,我正在將其轉換為另一種格式。這可以通過多種方式完成,但我選擇使用 Object.entries 來獲取包含鍵/值對的數組,然后使用 reducer 函數處理條目數組,如下所示: const langContent = { // The input object someKey: { en: 'Some en value', nb: 'Some nb value' }, someOtherKey: { en: 'some other en Value', nb: 'some other nb Value' }}const useLanguages = ['nb', 'en']const result = Object.entries( langContent ).reduce( ( obj, [key, val] ) => { useLanguages.forEach( ( langKey ) => { if ( ! obj[langKey] ) obj[langKey] = { translation:{} } obj[langKey].translation[key] = val[langKey] } ) return obj}, {} )// Expected output object in the form of { en: translation: {someKey: 'some en value'}}純 js 按預期工作:jsfiddle但是,當嘗試使用 Flow 進行類型檢查時(我花了一些時間試圖弄清楚如何做到這一點),我不斷在標題中收到錯誤。以下是我的一些嘗試:FlowTry1FlowTry2FlowTry3(對我來說,編寫流類型比編寫實際的 js 花費更多時間;)。錯誤出現在 reducer 函數中,并且與 Flow 期望 Object.entries 鍵/值對中的第二個數組項“混合”(我認為)有關。但我想做的是告訴 Flow,對于這個函數,我們可以期望一個對象作為鍵/值數組中的值,如下所示:Type ExpectedCurrentItem = [string, { [string] : string} ] } 甚至更好: Type ExpectedCurrentItem = [string, { ['en' | 'nb'] : string} ] }(是的,我知道我可以用另一種方式解決這個問題,例如使用 Object.keys() 代替,并且我已經設法獲得了一個沒有 Flow 錯誤的替代解決方案,但顯然我對 Flow 有一些不明白的地方邏輯,它嘮叨我)。非常感謝任何見解!
1 回答

慕虎7371278
TA貢獻1802條經驗 獲得超4個贊
由于缺乏對這個問題的回應,我重寫了我的代碼以消除流程錯誤:
type LangKeys = 'en' | 'nb'
type LangKeyValObj = {[string]: string | void}
type LangObj = {[LangKeys] : {translation: LangKeyValObj} }
const useLanguages : $ReadOnlyArray<LangKeys> = [
'nb',
'en'
]
const resources : LangObj = useLanguages.reduce( ( obj: LangObj, langKey : LangKeys ) => {
const trans = Object.keys( langContent ).reduce( ( o: LangKeyValObj, key: string ) => {
o[key] = langContent[key][langKey]
return o
},{} )
obj[langKey] = { translation: trans }
return obj
},{} )
添加回答
舉報
0/150
提交
取消