如何接受react组件构造函数作为typescript中的函数参数 从“react”导入{Component}; 导出类测试扩展组件{ render(){ 回复“你好”; } } 函数myFunction(c:c):void{ 控制台日志(“ctor”,c); } 常数s=myFunction(测试);

如何接受react组件构造函数作为typescript中的函数参数 从“react”导入{Component}; 导出类测试扩展组件{ render(){ 回复“你好”; } } 函数myFunction(c:c):void{ 控制台日志(“ctor”,c); } 常数s=myFunction(测试);,typescript,typescript2.0,Typescript,Typescript2.0,错误: 类型为“typeof Test”的参数不能分配给类型为的参数 “组件”。类型“typeof”中缺少属性“setState” 测试'。07:35:53-编译完成。监视文件更改 我是否需要使用super.(..)实现原始react组件类的所有成员 您需要将C的类型声明为扩展返回组件的新函数的类型: import { Component} from "react"; export class Test extends Component<{}, {}> { rende

错误:

类型为“typeof Test”的参数不能分配给类型为的参数 “组件”。类型“typeof”中缺少属性“setState” 测试'。07:35:53-编译完成。监视文件更改


我是否需要使用super.(..)实现原始react
组件
类的所有成员

您需要将
C
的类型声明为扩展返回组件的新函数的类型:

import { Component} from "react";

export class Test extends Component<{}, {}> {
      render() {
        return "Hello";
      }
    }

    function myFunction<P, S, C extends Component<P, S>>(c: C): void {
      console.log("ctor", c);
    }

    const s = myFunction(Test);
从“react”导入{Component};
导出类测试扩展组件{
render(){
回复“你好”;
}
}
函数myFunction Component>(c:c):无效{
控制台日志(“ctor”,c);
}
常数s=myFunction(测试);

仍有错误!,错误TS2345:类型为“typeof Test”的参数不能分配给类型为“new()=>Component”的参数。@这很有趣。同样的代码片段在编译时没有给我任何错误。事实上,我甚至可以毫无疑问地编写
varx:new()=>Component=Test
。不确定我们的结果之间为什么有差异。你的打字脚本版本是什么?>tsc-v=version2.6.2Hmm。把我的更新到相同的,仍然没有问题。这是您在IDE中看到的错误还是在实际的
tsc
命令输出中看到的错误?@等一下,我刚才想了一下。示例类没有构造函数,因此newable函数不接受任何参数。但是您的实际实现是否有构造函数参数?如果是这样,您可以尝试
new(…args:any[])=>Component
。编辑:或用于更多类型安全
新建(道具:P,状态:S)=>组件
import { Component} from "react";

export class Test extends Component<{}, {}> {
    render() {
        return "Hello";
    }
}

function myFunction<P, S, C extends new () => Component<P, S>>(c: C): void {
    console.log("ctor", c);
}

const s = myFunction(Test);