打字稿抱怨属性' JSX.IntrinsicElements'何时使用React.createClass?

时间:2016-05-24 12:56:05

标签: reactjs typescript redux

我正在使用typescript来编写redux应用程序。

var item = React.createClass({
  render: function() {
    return (<div>hello world</div>)
  }
});

export default class ItemList extends Component<any, any> {
    render() {
        return (<item />)
    }
}

然后打字稿抱怨这个:

Property 'item' does not exist on type 'JSX.IntrinsicElements'.

6 个答案:

答案 0 :(得分:13)

var Item = React.createClass({
  render: function() {
    return (<div>hello world</div>)
  }
});

export default class ItemList extends Component<any, any> {
    render() {
        return (<Item />)
    }
}

答案 1 :(得分:5)

您可以这样声明您的自定义元素类型:

declare namespace JSX {
  interface IntrinsicElements {
    item: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, 
  }
}

答案 2 :(得分:3)

这是因为item组件的名称不是以大写字母开头,从而导致Typescript抱怨。将item替换为Item可以解决此问题。

答案 3 :(得分:2)

对于坚持这一点的其他人。

解决方案是

rm -rf node_modules
npm install

打字稿抱怨

Property 'div' does not exist on type 'StyledInterface'.

Property 'div' does not exist on type 'JSX.IntrinsicElements'.

我认为根本原因是 vscode(我)不小心编辑了 node_modules 中的类型定义。

答案 4 :(得分:1)

看起来我和这个问题有同样的问题,但这是错别字:/但由于错误看起来非常相似,并且Google引导我来到了这里,所以我决定在这里分享。

我在声明中有错字:

declare global {
    namespace JSX {
        interface IntrinisicElements {
            'about-me': { me: string }
        }
    }
}

我使用的是 IntrinisicElements (而不是 IntrinsicElements )(在“ Intrin”之后加上“ i”字母)。编译器没有抱怨,因为它是接口的定义,因此名称可以由我们选择。

错误是这样的:

“ JSX.IntrinsicElements”类型上不存在“关于我”属性。

答案 5 :(得分:0)

我用PascalCase写组件的名字然后错误消失了