Javascript 流错误:无法调用`Object.entries(…).reduce`,因为`…`[1]与第二个参数的索引1中的混合[2]不兼容

Javascript 流错误:无法调用`Object.entries(…).reduce`,因为`…`[1]与第二个参数的索引1中的混合[2]不兼容,javascript,flowtype,Javascript,Flowtype,我是一个非常新的流动,我可能错过了一些非常基本的东西在这里 我有一个特定格式的对象,我正在将其转换为另一种格式。这可以通过多种方式完成,但我选择使用Object.entries获得一个包含键/值对的数组,然后使用reducer函数处理entries数组,如下所示: const langContent = { // The input object someKey: { en: 'Some en value', nb: 'Some nb value' }, someO

我是一个非常新的流动,我可能错过了一些非常基本的东西在这里

我有一个特定格式的对象,我正在将其转换为另一种格式。这可以通过多种方式完成,但我选择使用Object.entries获得一个包含键/值对的数组,然后使用reducer函数处理entries数组,如下所示:

 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的工作原理与预期类似:

然而,当尝试使用Flow进行类型检查时(我花了一些时间试图弄清楚如何进行),我总是在标题中看到错误。以下是我的一些尝试:

(对我来说,编写流类型要比编写实际的js花费更多的时间;)

这个错误在reducer函数中,与希望Object.entries键/值对中的第二个数组项为“混合”(我认为)的流有关。但是我想做的是告诉Flow,对于这个函数,我们可以期望一个对象作为键/值数组中的值,类似这样:
Type ExpectedCurrentItem=[string,{[string]:string}
或者更好:
Type ExpectedCurrentItem=[string,{['en'|'nb']:string}

(是的,我知道我可以用另一种方法来解决这个问题,例如使用Object.keys(),并且我已经成功地获得了一个没有流错误的替代解决方案,但是很明显,关于流逻辑,有一些东西我不理解,这让我很烦恼)


非常感谢您的任何见解

由于对这个问题没有回答,我重写了代码以消除流错误:

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
},{} )
type LangKeys='en'|'nb'
类型LangKeyValObj={[string]:string | void}
类型LangObj={[LangKeys]:{translation:LangKeyValObj}
常量useLanguages:$ReadOnlyArray=[
“nb”,
“嗯”
]
const resources:LangObj=useLanguages.reduce((obj:LangObj,langKey:LangKeys)=>{
const trans=Object.keys(langContent).reduce((o:LangKeyValObj,key:string)=>{
o[key]=langContent[key][langKey]
返回o
},{} )
obj[langKey]={translation:trans}
返回obj
},{} )