如何从另一个React组件复制Flow类型的属性?

时间:2018-09-14 23:33:01

标签: javascript reactjs flowtype

我正在创建一个包装另一个名为Button的组件的组件。 Button在不导出Button属性类型的库中定义。

要正确键入我的组件,最好复制Button属性的类型,为该类型添加一些属性(使用typeof$Diff等)并将其用作组件StyledButton的类型。

类似的东西:

type AddedPropsT = {
  isStyled: boolean,
}

function StyledButton(props: $GenericParam(typeof Button) & AddedPropsType) {
  return (<Button ...props className={isStyled ? "StyleClass" : ""} />)
}

当然,Flow中不存在util $GenericParam类型。 Button的类型是React.ComponentType<Props>(问题是如何从那里得到Props类型),而在幕后它是纯函数无状态组件。

1 个答案:

答案 0 :(得分:2)

您可以使用React.ElementConfig<typeof Component>实用程序类型来获取Button的道具类型:

type AddedProps = {
  isStyled: boolean,
}

function StyledButton(props: React.ElementConfig<typeof Button> & AddedProps) {
  return (<Button {...props} className={props.isStyled ? "StyleClass" : ""} />)
}