当前位置: 首页 > 知识库问答 >
问题:

前端 - React 类组件报错:Parsing error: '>' expected.eslint 找不到名称“div”。ts(2304)?

卫英悟
2024-09-01

在编写一个类组件的时候:

import React from 'react'


export default class GroupComp extends React.Component {
...

  render() {
    return (
      <div className="collapsable-app">
        <div className="app-content" ref={this.refContainer} />
      </div>
    )
  }
}

有2个报错:
1、

Parsing error: '>' expected.eslint
找不到名称“div”。ts(2304)
type div = /*unresolved*/ any

2、

应为“>”。ts(1005)
找不到名称“className”。ts(2304)
any

请问为何会报错呢?
使用函数式组件定义不会。

===

我已经安装了:

pnpm install @types/react @types/react-dom --save-dev

共有1个答案

叶裕
2024-09-01

这个问题通常与TypeScript的配置和/或ESLint的配置有关。从你的描述来看,有几个可能的原因和解决方案:

原因1:TypeScript配置问题

确保你的tsconfig.json文件配置正确,特别是jsx选项应该被设置为reactreact-jsx(取决于你的TypeScript版本)。例如:

{
  "compilerOptions": {
    "jsx": "react-jsx", // 或者 "react" 取决于你的TypeScript版本
    "allowJs": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "skipLibCheck": true
  },
  "include": ["src/**/*"]
}

原因2:ESLint配置问题

确保你的.eslintrceslintConfigpackage.json中正确配置了React的插件和规则。特别是,你可能需要安装和配置eslint-plugin-react以及确保它支持你正在使用的JSX语法。

安装ESLint React插件

如果你还没有安装,可以通过npm或pnpm来安装:

pnpm install eslint-plugin-react --save-dev

更新.eslintrceslintConfig

确保你的ESLint配置文件包含了React插件,并且配置了适当的规则。例如:

{
  "extends": [
    "eslint:recommended",
    "plugin:react/recommended"
  ],
  "parserOptions": {
    "ecmaFeatures": {
      "jsx": true
    }
  },
  "plugins": [
    "react"
  ],
  "rules": {
    // 你可以在这里覆盖或添加额外的规则
  }
}

原因3:文件扩展名

确保你的文件扩展名是.tsx而不是.ts,特别是当你的组件使用了JSX时。.tsx扩展名告诉TypeScript编译器这个文件包含JSX代码。

原因4:项目依赖

虽然你已经安装了@types/react@types/react-dom,但确保它们与你的reactreact-dom库版本兼容。有时候,类型定义可能滞后于库本身。

总结

  • 确保tsconfig.json中的jsx选项正确。
  • 确保安装了eslint-plugin-react并正确配置了ESLint。
  • 确保文件扩展名是.tsx
  • 检查react@types/react的版本兼容性。

按照这些步骤操作后,问题应该能得到解决。如果问题依旧,可能需要检查更详细的配置或查看是否有其他相关的错误或警告信息。

 类似资料:
  • vue3 + ts项目,使用localStorage获取本地存储,ts报错 这该咋整?

  • 我试图在Ionic上使用Google Analytics插件,文档代码不适用于我使用: 编辑器说“ts:找不到名称‘GoogleAnalytics’”,但它可以看到一些对象GoogleAnalyticsOriginal,该对象已编译但不工作(在运行时出错)。 这些是系统规范ionic(ionic CLI):4.5.0 离子骨架:离子角3.9.2 @爱奥尼亚/应用程序脚本:3.2.1 Cordova

  • ts文件中,Math.round和parseInt函数中包裹同样的表达式,为什么parseInt方法会有报错? Math.round正常编译,parseInt编译报错

  • 在vue3和pinia使用ts type+sId+zId 三个都会报 “property type does not exist on object” 新补充 v1,v2...是接口返回来的,自己重新定义了新key,v1写在IUserState了没有报错,其他都飘红

  • 我通过pnpm的workspace搭建了一个工作环境,并且在项目中安装typescript,但是在packages中的项目中无法识别别名文件的路径。报错如下: 我在对应的packages项目中添加了tsconfig.json,配置如下: 配置中已经包含了,对应的文件路径,在vite.config.ts也配置了相应的别名路径,项目时可以正常运行的。只是vscode会抛出这个错误,**.ts文件不会有

  • 我是angular 2和typescript的新手,正在尝试为我的弹出窗口调用RocketLaunch函数。 如果我在弹出窗口外声明它不调用,但如果我在弹出窗口内移动它抛出此错误: 错误TS2304:找不到名称“$event” 提供以下相关代码和错误:

  • events.js:377 RangeError [Error]: Maximum call stack size exceeded Emitted 'error' event on process instance at: npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! sea-wind-power@1.0.0 dev: vite --hos