14

我正在尝试在基于 Typescript 的项目中使用名为 redux-form 的库。当我采用他们的“简单形式”示例代码并实现它时,我得到一个错误:

error TS2604: JSX element type 'SimpleForm' does not have any construct or call signatures.

我究竟做错了什么?我已经安装了这个库的定义文件,所以要么我编码不正确,要么定义文件不正确。

在我的表单组件中(剥离代码以使其尽可能精简):

import * as React from 'react';
import {reduxForm} from 'redux-form';
export const fields = ['firstName'];

class SimpleForm extends React.Component<any, any> {

  static propTypes = {
    fields: React.PropTypes.object.isRequired,
  };

  render() {
    const {
      fields: {firstName}
      } = this.props;
    return (<form>
        <div>
          <label>First Name</label>
          <div>
            <input type="text" placeholder="First Name" {...firstName}/>
          </div>
        </div>

        <div>
          <button>
            Submit
          </button>
        </div>
      </form>
    );
  }
}

export default reduxForm({
  form: 'simple',
  fields
})(SimpleForm);

我在这里使用它(导致上述错误):

import * as React from 'react';
import * as ReactDOM from 'react-dom';
import * as SimpleForm from '../components/GuestForm';

export default class Main extends React.Component<any, any> {
     render() {
        return (
        <div className='mainApp'>
            <SimpleForm />
        </div>
        );
    }
}
4

3 回答 3

19

我认为您的问题在于如何导入默认导出类:

export default reduxForm(...

如果您已按上述方式声明它,那么您应该像这样导入它:

import SimpleForm from '../components/GuestForm'

否则,您可以删除“默认”并像这样导入它:

import {SimpleForm} from '../components/GuestForm' 

希望这可以帮助。

于 2016-01-24T07:05:59.990 回答
5

我无法评论上面的答案(来自 Amid),因为我在 StackOverflow 上没有足够的声誉,但他的回答是正确的。

我遇到了同样的问题:***(82,14):错误 TS2604:JSX 元素类型“SlideForm”没有任何构造函数调用签名。***

这是我之前的代码:

export default class SliderForm extends React.Component<any, any> {...};

使用以前的导入类的方式:

import * from SlideForm from '../../common/SliderForm';

这导致我遇到与您相同的问题。


所以我改变了导入的方式:

import SlideForm from '../../common/SliderForm';

它解决了我的问题。

于 2016-11-27T22:55:03.970 回答
0

在您的情况下,您也可以这样做(因为它已默认导出)

import * as SlideForm from '../../common/SliderForm';

如果组件已作为默认值导出并且您尝试使用 {} 或作为 * 导入它,则会出现此错误

或者反过来。

如果组件未声明为默认组件,则应使用大括号导入,例如 -

import {component} from '../path/..'
于 2022-01-13T23:00:57.960 回答