Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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
Reactjs 什么';作为装饰器使用的TypeScript的正确返回类型是什么?_Reactjs_Typescript_Higher Order Components - Fatal编程技术网

Reactjs 什么';作为装饰器使用的TypeScript的正确返回类型是什么?

Reactjs 什么';作为装饰器使用的TypeScript的正确返回类型是什么?,reactjs,typescript,higher-order-components,Reactjs,Typescript,Higher Order Components,我正在尝试用TypeScript编写一个简单的HOC,但对返回类型应该是什么感到困惑。HOC的外观如下所示: export const requiresUser = <P extends object>(Component: React.ComponentType<P>) => class RequiresUser extends React.Component<P> { componentDidMount() { console

我正在尝试用TypeScript编写一个简单的HOC,但对返回类型应该是什么感到困惑。HOC的外观如下所示:

export const requiresUser = <P extends object>(Component: React.ComponentType<P>) =>
  class RequiresUser extends React.Component<P> {
    componentDidMount() {
      console.log("requires user")
    }

    render() {
      return <Component {...this.props} />
    }
  }

所以我的问题是,HOC的返回类型应该是什么,以允许使用它来定义所需函数的组件?返回
any
可以让它工作,但感觉像是作弊。

似乎typescript现在不支持decorator中的类型变异(因为修饰组件与原始组件不同)

解决办法:

export const requireuser=<
P
T扩展{new(props:P):React.Component

} >( 组成部分:T ):T=>{ 类requireuser扩展React.Component

{ componentDidMount(){ console.log(“需要用户”); } render(){ 返回; } } 将请求者返回为T; };

@requiresUser
export class DashboardPage extends React.Component<{}> {

  someFunction = () => {
    console.log("hi")
  }

  render() {
    return (
      <div>
        DashboardPage
      </div>
    )
  }
}
(11, 1): Unable to resolve signature of class decorator when called as an expression.
  Type 'typeof RequiresUser' is not assignable to type 'typeof DashboardPage'.
    Type 'requiresUser<{}>.RequiresUser' is not assignable to type 'DashboardPage'.
      Property 'someFunction' is missing in type 'requiresUser<{}>.RequiresUser'.