请考虑以下代码 . Wrapper1 呈现 Wrapper2 ,将 Final 组件作为道具传递给它,以及 Final 最终期望的几个道具, finalPropw2prop . Wrapper2 然后渲染传递给它的组件,将其所有道具传递给该渲染组件 . 在这种情况下, Final 组件将由 Wrapper2 呈现,并且它正在接收所需的道具 .

但是,Flow不明白这一点 . 我收到以下两个错误:

属性finalProp属性在对象类型中找不到参见:React元素Wrapper2属性w2prop在对象类型中找不到属性参见:React element Wrapper2

type FinalT = {
  finalProp: number,
  w2prop: number,
};

function Final(props: FinalT): React.Element<*> {
  return (
    <div>
      {props.finalProp}
      {props.w2prop}
    </div>
  );
}

export default function Wrapper1(): React.Element<*> {
  return (
    <Wrapper2
      component={Final}
      finalProp={7}
      w2prop={7}
    />
  );
}

type Wrapper2T = {
  component: (*) => React.Element<*>,
};

function Wrapper2(props: Wrapper2T): React.Element<*> {
  const Cmp = props.component;

  return <Cmp {...props} />;
}

基于错误消息,Flow明显知道 Final 正在由 Wrapper2 呈现 . 然而,它没有意识到正在提供必要的道具 . 我觉得这很奇怪 . 如果它可以告诉 Wrapper2 中的 props.componentFinal ,那么我'd expect it to know the full scope of what'在 props 中 .

如果我将 finalPropw2prop 添加到 type Wrapper2T ,那么Flow很高兴 . 但这是一个非首发,因为 Wrapper2 应该是一个更高阶的组件,它与最终呈现的组件无关 .

我应该采用不同的方式来注释这些流类型吗?或者用于创建和渲染这些组件的不同模式?我认为我上面提到的是React中的标准模式,所以必须有一些解决方案 .