在此React HOC中,“ Comp”的正确流类型是什么?

时间:2019-03-03 15:24:00

标签: react-native flowtype

export default Comp => ({ children, ...props }: { children?: Node }) => (
  <KeyboardAvoidingWrapper
    keyboardVerticalOffset={-getBottomSpace() / 2}
    behavior="padding"
    enabled
  >
    <Comp {...props}>{children}</Comp>
  </KeyboardAvoidingWrapper>
);

这是错误代码流生成的: 缺少'Comp'.Flow(InferError)的类型注释

编辑: FlowVersion:0.78.0 RNVersion:0.57

2 个答案:

答案 0 :(得分:1)

从流程0.89.0开始,您要在HOC中用于包装组件的类型为React.AbstractComponent

此类型采用两个类型参数,def DFS(self, n, row, col, pie, na, path): if row == n: print 'current recursion path: ', path self.queues.append(path) print 'paths within the recursion: ', self.queues return for c in range(n): if (c not in col) and (c + row not in pie) and (row-c not in na): col.add(c) pie.add(c+row) na.add(row-c) self.DFS(n, row + 1, col, pie, na, path + [c]) col.remove(c) pie.remove(c+row) na.remove(row-c) ConfigInstance通常可以安全地忽略,并且Instance在技术上同时包含Config类型的 Props,实际上仅用作{ {1}}类型。因此,我们基本上可以将任何React组件(类,函数,所拥有的东西)键入为DefaultProps

Props

请注意,我们在React.AbstractComponent<Props> bound中添加了generic,以告知流程// @flow import * as React from 'react'; export default <Props: { children: React.Node }>( Comp: React.AbstractComponent<Props>, ) => ({ children, ...props }: Props) => ( //... ); 将始终包含类型{{ 1}},否则当我们尝试从Props中提取Props时,流程将不知道它存在。

Buuuut,由于您在较旧的流版本中使用react-native,因此您需要使用children,它的抽象性稍差(它不会短暂地React.Node较早前提过)。 Here's一个例子。

答案 1 :(得分:0)

可能是因为在定义之前使用<Comp />吗? 导出默认Comp,导出组件函数,然后在其中调用一个组件(可能未定义)。 可以先尝试一下,看看错误消失了吗?

export default Comp => ({ children, ...props }: { children?: Node }) => (
  <KeyboardAvoidingWrapper
    keyboardVerticalOffset={-getBottomSpace() / 2}
    behavior="padding"
    enabled
  >
    <Text {...props}>{children}</Text>
  </KeyboardAvoidingWrapper>
);