请考虑以下代码 . Wrapper1
呈现 Wrapper2
,将 Final
组件作为道具传递给它,以及 Final
最终期望的几个道具, finalProp
和 w2prop
. 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.component
是 Final
,那么我'd expect it to know the full scope of what'在 props
中 .
如果我将 finalProp
和 w2prop
添加到 type Wrapper2T
,那么Flow很高兴 . 但这是一个非首发,因为 Wrapper2
应该是一个更高阶的组件,它与最终呈现的组件无关 .
我应该采用不同的方式来注释这些流类型吗?或者用于创建和渲染这些组件的不同模式?我认为我上面提到的是React中的标准模式,所以必须有一些解决方案 .