错误 TS2602:JSX 元素隐式具有类型“任何”,因为全局类型“JSX.Element”不存在

Posted

技术标签:

【中文标题】错误 TS2602:JSX 元素隐式具有类型“任何”,因为全局类型“JSX.Element”不存在【英文标题】:error TS2602: JSX element implicitly has type 'any' because the global type 'JSX.Element' does not exist 【发布时间】:2016-10-07 00:58:15 【问题描述】:

即使我已经像这样安装并引用了 Typings 库 'react'

/// <reference path="../../../typings/browser.d.ts" />

我仍然收到以下错误:

我还应该安装另一个 Typings 库吗?

【问题讨论】:

【参考方案1】:

我通过安装反应类型定义解决了这个问题。

尝试运行yarn add --dev @types/react

【讨论】:

对于 npm,npm install --dev @types/react 有效【参考方案2】:

我通过重新加载 VSCode 解决了这个问题。

Ctrl + p > Developer: Reload Window

【讨论】:

我从 react-dom 16.x 升级到 17 后遇到了这个问题。重新加载窗口解决了这个问题。谢谢! 这完美解决了问题 天哪,那太好了 重启 TypeScript 语言服务器可能就足够了:CMD+P > Typescript: Restart TS Server(输入rets【参考方案3】:

在 Typings 中有两个版本的 React。我用typings install reactnoImplicitAny 看到了这个问题。

我通过安装全局版本解决了这个问题:typings install dt~react --global

【讨论】:

我真希望他们能整合他们的图书馆。不得不在多个地方处理全局\环境\主要冲突对我们的团队来说是一个无穷无尽的麻烦:( 我完全同意。我希望更多的供应商将他们的类型发布到他们的库中(比如 ImmutableJS)【参考方案4】:

尝试运行这个:

1. npm i @types/react --save-dev

2. npm i @types/react-dom --save-dev

为我工作。

【讨论】:

也为我工作!当您将鼠标悬停在标记的文本上时,VS Code 也会提出此建议。【参考方案5】:

把这个配置放到tsconfig.json文件中,这样ts服务器就不会识别出那种类型的错误


    "compilerOptions": 
        "outDir": "build/dist",
        "module": "commonjs",
        "target": "es5",
        "lib": ["es6", "dom"],
        "sourceMap": true,
        "allowJs": true,
        "jsx": "react",
        "moduleResolution": "node",
        "rootDir": "src",
        "noImplicitReturns": true,
        "noImplicitThis": true,
        "noImplicitAny": true,
        "strictNullChecks": true
    ,
    "exclude": [
        "node_modules",
        "build",
        "scripts",
        "acceptance-tests",
        "webpack",
        "jest",
        "src/setupTests.ts"
    ],
    "types": [
        "typePatches"
    ]

【讨论】:

必须是 "jsx": "react-jsx"【参考方案6】:

我遇到了类似的问题,在阅读了其他解决方案后,我查看了我的 tsconfig.json,显然它(vs-code)抱怨我的配置中有一个小错误,当我纠正它时,它就消失了。

所以主要带走:检查 tsconfig 中是否没有错误

注意 我不确定该错误是否相关,但是当我的allowJs 设置为 false 时,vs-code 抱怨 checkJs 已定义(未设置为 false)。所以基本上我的解决方案是将allowJscheckJs都设置为false:


  "compilerOptions": 
    ...
    "allowJs": false,
    "checkJs": false,
    ...
  

【讨论】:

【参考方案7】:

我遇到了同样的问题,将tsconfig.json 更新为以下代码并重新启动了为我工作的服务器。


  "compilerOptions": 
    "target": "ES2016",
    "declaration": false,
    "module": "commonjs",
    "moduleResolution": "node",
    "noImplicitAny": false,
    "allowJs": false,
    "preserveConstEnums": true,
    "removeComments": true,
    "sourceMap": true,
    "typeRoots": [
      "./node_modules/@types"
    ],
    "keyofStringsOnly": true,
    "lib": ["es2015", "es2017", "dom"],
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "jsx": "react"
  

【讨论】:

【参考方案8】:

我还需要添加npm i @types/react-dom --save-dev 来解决这个问题。

【讨论】:

【参考方案9】:

从handbook 开始,React 必须有一个大写字母。问题中的代码显然没有。

【讨论】:

认为值得让您知道为什么您(或未来的读者)被否决的原因:只有 React 组件必须使用大写字母,而不是 html 元素

以上是关于错误 TS2602:JSX 元素隐式具有类型“任何”,因为全局类型“JSX.Element”不存在的主要内容,如果未能解决你的问题,请参考以下文章

绑定元素“组件”隐式具有“任何”类型.ts [重复]

元素隐式具有“任何”类型,因为类型“窗口”没有索引签名?

TS7053:元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引类型“用户经济”

错误:参数“e”隐式具有“任何”类型。 TS7006 - 反应打字稿

TypeScript - ts(7053):元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引

元素隐式具有“任何”类型,因为类型的表达式