当我将React与TypeScript一起使用时,我通常会创建一个ES6类来定义一个类似的组件:
import * as React from 'react';
interface TextProps { text: string; }
export class Panel extends React.Component<TextProps, any> {
constructor(props: TextProps) {
super(props);
}
render() {
return <div className="panel">{this.props.text}</div>;
}
}
export class Label extends React.Component<TextProps, any> {
constructor(props: TextProps) {
super(props);
}
render() {
return <span className="label">{this.props.text}</span>;
}
}
我想要做的是创建一个同时接受Panel
或Label
的类型。
我尝试了以下内容:
type TextComp = React.Component<TextProps, any>;
function create(component: TextComp, text: string) {
return React.createElement(component, { text: text });
}
这显示了React.createElement(component,
参数上的编译器错误,但代码运行正常。
如何定义类型TextComp
,以便使用TypeScript版本2.2.1编译此代码而不会出错?
答案 0 :(得分:3)
你想要的是这个:
type TextComp = new(...args: any[]) => React.Component<TextProps, any>;
function create(component: TextComp, text: string) {
return React.createElement(component, { text: text });
}
根本原因与What does the error "JSX element type '...' does not have any construct or call signatures" mean?
中解释的相同