我正在创建一个高阶组件来包装扩展接口的组件:
interface ClickOutsideInterface {
onClickOutside: (e: Event) => void
}
我创建的工厂期望React.ComponentClass
实现ClickOutsideInterface
:
function clickOutside<P>(Component: React.ComponentClass<P> & ClickOutsideInterface){
return class ClickOutside extends React.Component<P, {}> {
/* on click outside invoke Component.onClickOutside */
render() {
return(<div><Component {...this.props} /></div>)
}
}
}
为了测试工厂,我实现了一个扩展ClickOutsideInterface
class Test extends React.Component<TProps, TState> implements ClickOutsideInterface {
onClickOutside(event: Event): void {
this.setState({
closed: true
})
}
render(){
return(
<div>{this.state.closed}</div>
)
}
}
但是当我在函数中使用组件作为参数时clickOutside
:
const withClickOutside = clickOutside(Test)
我收到以下参数类型错误Test
:
“typeof Test”类型的参数不可分配给“ComponentClass & ClickOutsideInterface”类型的参数。类型“typeof Test”不可分配给类型“ClickOutsideInterface”。“typeof Test”类型中缺少属性“onClickOutside”。
为什么 Typescript 认为我没有在中实现接口的任何想法Test
?