使用 React.createClass 时,Typescript 抱怨“JSX.IntrinsicElements”类型上不存在属性?

IT技术 reactjs typescript redux
2021-04-30 05:13:09

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

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

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

然后typescript抱怨这个:

Property 'item' does not exist on type 'JSX.IntrinsicElements'.
4个回答

您的组件必须以大写字母I而不是小写字母开头,i否则 TypeScript 会大喊大叫。更改itemItem应该修复它:

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

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

那是因为你的item组件名称不是以大写字母开头,导致 Typescript 报错。替换itemItem可以解决这个问题。

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

import * as React from 'react'

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

看起来我在这个问题中遇到了同样的问题,但它是错字:/但我决定在这里分享,因为错误看起来非常相似,谷歌把我带到了这里。

我在声明中有错字:

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

而不是IntrinsicElements我有IntrinisicElements('Intrin' 后面的额外的 'i' 字母)。编译器没有抱怨,因为它是接口的定义,所以名称可以由我们选择。

错误是这样的:

类型“JSX.IntrinsicElements”上不存在属性“about-me”。