使用React.createClass时,类型'抱怨'在'JSX.IntrinsicElements'类型中不存在?

rog*_*ger 17 typescript reactjs 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 />)
    }
}
Run Code Online (Sandbox Code Playgroud)

然后打字稿抱怨这个:

Property 'item' does not exist on type 'JSX.IntrinsicElements'.
Run Code Online (Sandbox Code Playgroud)

Jka*_*nen 32

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

解决方案是

rm -rf node_modules
npm install
Run Code Online (Sandbox Code Playgroud)

打字稿抱怨

Property 'div' does not exist on type 'StyledInterface'.
Run Code Online (Sandbox Code Playgroud)

Property 'div' does not exist on type 'JSX.IntrinsicElements'.
Run Code Online (Sandbox Code Playgroud)

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

  • 我同意,当在组件上使用重构功能时,vscode 确实会重命名类型定义,例如 `&lt;button&gt;` → `&lt;a&gt;` (8认同)
  • 换句话说,您在标签上按 F2 将其更改为其他内容,并且您在类型定义中逐字重命名。`npm uninstall @types/react` 和 `npm install --save-dev @types/react` 为我做到了。 (3认同)

Sin*_*pcs 23

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

import * as React from 'react'

declare global {
  namespace JSX {
    interface IntrinsicElements {
      item: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案。只是为了防止它不明显,如果您的自定义组件被命名为“my-item”,那么语法是 ['my-item']: React.DetailedHTMLProps... (2认同)

jsi*_*ina 22

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


Raj*_*bat 21

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

export default class ItemList extends Component<any, any> {
    render() {
        return (<Item />)
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 为了清楚未来的面孔,诀窍是`Item`中的大写字母`I`.我们所有人都在这里尝试相同的判断失败,试图找到一个反应元素.如果你正在阅读这篇文章,你可能会被剥夺足够的资源而错过大写字母. (30认同)

小智 8

对于所有遇到类似错误的人:

Property 'div' does not exist on type 'JSX.IntrinsicElements'.
Run Code Online (Sandbox Code Playgroud)

或者任何其他标签来代替 div。如果其他解决方案没有帮助,请尝试添加到tsconfig.json

...    
"compilerOptions": {
    "moduleResolution": "node"
    }
...
Run Code Online (Sandbox Code Playgroud)


Jam*_*com 7

请记住:“item”在 TypeScript 中无效,您必须声明为“Item”,首字母大写!它会像:

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

再会!


Bli*_*itz 7

对于遇到此问题并且之前的答案不起作用的其他人,.tsx由于tsconfig.json文件配置错误,这种情况也可能发生在文件中。

我遇到了以下错误:

...
"compilerOptions": {
   "jsx": "react-jsx"
}
...
Run Code Online (Sandbox Code Playgroud)

并通过将其更改为解决了它:

...
"compilerOptions": {
   "jsx": "react"
}
...
Run Code Online (Sandbox Code Playgroud)

div同样,上面的答案可能是首先要检查的事情,但如果您在标准 HTML 元素(如、等)上遇到这些错误,span并且您正在使用 Typescript。检查你的 tsconfig.json!


Bro*_*nek 6

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

我在声明中有错字:

declare global {
    namespace JSX {
        interface IntrinisicElements {
            'about-me': { me: string }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

错误是这样的:

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