Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用流键入复杂的HOC以无法实例化的组件结束_Javascript_Reactjs_Flowtype - Fatal编程技术网

Javascript 使用流键入复杂的HOC以无法实例化的组件结束

Javascript 使用流键入复杂的HOC以无法实例化的组件结束,javascript,reactjs,flowtype,Javascript,Reactjs,Flowtype,我正试图用流来输入一个已经存在的复杂的HOC,我真的在与之斗争。 我以为我有它,但是当我尝试使用结果组件时,它是不可能使用的,我总是得到一个错误,告诉我道具(通过的道具)与道具(通用的)不兼容 行为是这样的: HOC接受任何组件(简单部分) 返回的组件将满足包装需求组件的一部分(因此需要使用$Diff来减去注入的道具) 返回的组件使用了一些新的道具,这些道具不会转发给包装好的组件,而是在内部使用 因此,我有一个类型化的函数,它有两个泛型:一个表示包装组件将要处理的数据的内部类型,另一个表示原

我正试图用流来输入一个已经存在的复杂的HOC,我真的在与之斗争。 我以为我有它,但是当我尝试使用结果组件时,它是不可能使用的,我总是得到一个错误,告诉我
道具(通过的道具)与道具(通用的)不兼容

行为是这样的:

  • HOC接受任何组件(简单部分)
  • 返回的组件将满足包装需求组件的一部分(因此需要使用$Diff来减去注入的道具)
  • 返回的组件使用了一些新的道具,这些道具不会转发给包装好的组件,而是在内部使用
因此,我有一个类型化的函数,它有两个泛型:一个表示包装组件将要处理的数据的内部类型,另一个表示原始组件的支柱


type Options = {
  keepDataFromProp: boolean,
}

type InjectedProps<T: {}> = {|
  form: Form<T> | void,
|}

type FormState = {|
  data: {},
  originalData: {},
  errors: {},
|}

const ControlledForm = <T: {}, Props: {}>(
  ChildComponent: ComponentType<Props>,
  options: Options = defaultOptions
) => {
  type HocProps = $Diff<
    {
      ...Props,
      data?: T,
      ignorePristine?: boolean,
      onSubmit: (a: T, resolve?: () => any, reject?: () => any) => any,
    },
    InjectedProps<T>
  >
  class ControlledFormHOC extends Component<HocProps, FormState>
// ... constructor and all that stuff
 return ControlledFormHOC
}

类型选项={
keepDataFromProp:boolean,
}
类型InjectedProps={|
形式:形式|无效,
|}
类型FormState={|
数据:{},
原始数据:{},
错误:{},
|}
常数受控形式=(
ChildComponent:ComponentType,
选项:选项=默认选项
) => {
类型HocProps=$Diff<
{
…道具,
数据?:T,
ignorePristine?:布尔值,
提交:(a:T,解析?:()=>any,拒绝?:()=>any)=>any,
},
注射道具
>
类ControlledFormHOC扩展组件
//…构造函数之类的东西
返回控制FormHoc
}
因此,当需要使用它时,我就是这样做的,它会发生什么:

type TheData = {name: string, age: number}
type Props = { form: Form<TheData>, isCool: boolean }

const ComponentForm = ControlledForm<TheData, Props>(Component)
      <ComponentForm {...props}/> //Cannot create `SalaryForm` element because  props [1] is incompatible with  `Props` [2].Flow(InferError)

type TheData={name:string,age:number}
类型Props={form:form,isCool:boolean}
常量ComponentForm=受控形式(组件)
//无法创建'SalaryForm'元素,因为道具[1]与'props`[2]不兼容。流(错误)
一开始我对打字很满意,但看到无法使用,我想知道我做错了什么