reactjs - react typescript 如何键入一个 hoc

标签 reactjs typescript

我想在我的全新项目中使用 typescript 但是我很难输入 HOC 组件

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

它不适用于此错误

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

那么正确的方法是什么?

最佳答案

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

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

const withClass = (Wrapped: React.ComponentType<any>, className: string) => { ... }

最好使用特定的 Prop 类型而不是any .如果应该像 HOC 所期望的那样将 props 传递给包装的组件,this issue也应该解决:

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

关于reactjs - react typescript 如何键入一个 hoc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54726063/

相关文章:

javascript - 调用另一个组件内的方法 - React Js

javascript - React 使用状态更新输入文本值并使其可变

javascript - React - componentDidMount API 调用未获取数据?

javascript - 替换响应中的特殊字符和空格

javascript - 如何指示我们确定变量的值在 Typescript 中的数组中的变量和数组的类型?

javascript - 未捕获的类型错误 : Cannot read property 'props' of undefined in reactJS when uploading image

javascript - VSCode TypeScript Lint

javascript - 是否可以清除 NGZone 中设置的所有间隔?

javascript - Angular 过滤器 + typescript

javascript - 当 div 换行看起来像网格时,如何对齐 div 以进行触摸