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