React typescript 如何输入 hoc

use*_*366 3 typescript reactjs

我想在我的全新项目中使用打字稿,但我很难输入 HOC 组件

const withClass = (Wrapped: Component<any, {}, any>, className: string) => {
  return props => (
    <div className={className}>
      <Wrapped />
    </div>
  );
};
Run Code Online (Sandbox Code Playgroud)

它不适用于此错误

类型错误:“typeof App”类型的参数不可分配给“组件”类型的参数。“typeof App”类型缺少“Component”类型中的以下属性:context、setState、forceUpdate、render 等 3 个。TS2345

那么正确的方法是什么?

Est*_*ask 7

Component<...>type 指定 的一个实例React.Component

如果目的是提供组件本身并且不将 HOC 限制为类组件,那么正确的类型是ComponentType

const withClass = (Wrapped: React.ComponentType<any>, className: string) => { ... }
Run Code Online (Sandbox Code Playgroud)

最好使用特定的 props 类型而不是any. 如果 props 应该像通常从 HOC 期望的那样传递给包装的组件,那么这个问题也应该得到解决:

const withClass = <P extends {}>(Wrapped: React.ComponentType<P>, className: string) => {
  return props => (
    <div className={className}>
      <Wrapped {...props as P} />
    </div>
  );
};
Run Code Online (Sandbox Code Playgroud)

  • 忽略我最后的评论:我将 `props` 更改为 `(props: P)` 并且它有效 (2认同)