299

我环顾四周寻找解决此问题的方法。他们都建议添加"jsx": "react"到您的 tsconfig.json 文件中。我已经做到了。另一个是添加"include: []",我也这样做了。但是,当我尝试编辑.tsx文件时,我仍然收到错误消息。下面是我的 tsconfig 文件。

{
    "compilerOptions": {
        "module": "commonjs",
        "target": "es5",
        "allowJs": true,
        "checkJs": false,
        "jsx": "react",
        "outDir": "./build",
        "rootDir": "./lib",
        "removeComments": true,
        "noEmit": true,
        "pretty": true,
        "skipLibCheck": true,
        "strict": true,
        "moduleResolution": "node",
        "esModuleInterop": true
    },
    "include": [
        "./lib/**/*"
    ],
    "exclude": [
        "node_modules"
    ]
}

任何的意见都将会有帮助。我正在使用 babel 7 编译所有带有 env、react 和 typescript 预设的代码。如果你们需要更多文件来帮助调试,请告诉我。

4

29 回答 29

571

每次我运行时npm start,它都会覆盖我配置的任何内容,以便{jsx: ...}react-jsxReact 17 中的 JSX 转换兼容。

The following changes are being made to your tsconfig.json file:
  - compilerOptions.jsx must be react-jsx (to support the new JSX transform in React 17)

问题是 VSCode 使用旧版本的 typescript (4.0.3),而项目附带的 typescript 版本是 (4.1.2)。

以下为我做了诀窍:

  1. 转到命令面板++ CTRL( 或ShiftP⌘</kbd>+Shift+P on Mac).
  2. 选择“TypeScript:选择 TypeScript 版本...”。
  3. 选择“使用工作区版本”。

VSCode 状态栏

VSCode 命令面板

TypeScript 工作区版本

于 2020-11-23T13:34:06.333 回答
438

除非提供了“--jsx”标志,否则不能使用 JSX

重新启动您的 IDE。有时不会立即获取 tsconfig.json 更改

于 2018-05-21T01:30:41.497 回答
120

对于阅读的人,请转到 tsconfig.json 并将该行从更改react-jsxreact

{
  "compilerOptions": {
    "jsx": "react"
  }
}

奖励:尝试在 vscode CMD + SHIFT + P 中将 IDE TS 版本设置为最新(atm 4.2)并从那里进行更改。

于 2020-11-21T18:56:33.647 回答
87

create-react-app开箱即用。AS OF 2022 FEBRUARY

在 tsconfig 内部,include仅设置为/src,更改为:

  "include": [
    "./src/**/*.ts"
  ]
于 2020-11-25T20:05:37.623 回答
17

就我而言,问题在于 VSCode 生成了一个空tsconfig.json文件,当然,它什么也没做。

tsconfig.jsonTypescript 的 React Page中添加了这个:

{
    "compilerOptions": {
        "outDir": "./dist/",
        "sourceMap": true,
        "noImplicitAny": true,
        "module": "commonjs",
        "target": "es6",
        "jsx": "react"
    }
}

...然后点击save,VSCode 从那里拿走了它。

于 2020-04-14T22:40:26.067 回答
14

如果您在使用 Typescript 运行 create-react-app 后遇到此问题,您可以通过"typescript.tsdk": "node_modules/typescript/lib"添加.vscode/settings.json.

对于 IntelliSense,如果您使用,则"jsx": "react-jsx"需要切换工作区以使用 TS 4.1+

或者在视觉上,只需转到蓝色任务栏并选择 Typescript 版本(可能是 4.xx 的东西),然后选择“选择 TypeScript 版本”。

在此处输入图像描述

然后选择应该引用的“使用工作区版本版本”node_modules/typescript/lib

在此处输入图像描述

于 2020-11-30T10:11:02.380 回答
14

2021 年 4 月,这个问题仍然存在。我正在使用react-boilerplate-cra-template和 react 17.02。

这是VSCode 的一个问题,它默认使用其内置的打字稿。您只需要打开一个 .tsx 文件并

  1. 按: Ctrl + Shift + P
  2. 输入:打字稿:选择打字稿版本...
  3. 选择:使用工作区版本。
于 2021-04-09T09:52:39.523 回答
8

这个答案是关于 VS Code 和这个 IDE 中持续存在的特定错误。(有人可能会觉得这很有用)

如果您使用的是 Webpack 或其他类似工具,即使您的 tsconfig 将 jsx 的编译器选项设置为 React,您仍然可能会收到此错误。

有一个解决方案。问题是 VS Code 为 tsc 内置了自动检测功能。

要消除编辑器中的错误,您可以将其放在用户设置中:

{
    "typescript.tsc.autoDetect": "off"
}

请注意,您将不再获得 tsc 自动检测,但如果您主要使用 Webpack 之类的工具或使用标志自己处理命令,那么这没什么大不了的。

注意:仅当错误在 VS Code 中持续存在时才执行此操作。为确保此行为持续存在,请在配置 tsconfig.json 文件后重新加载窗口并重新启动编辑器。

于 2018-06-29T15:31:38.643 回答
5

即使在运行时我也收到了这个错误,npx tsc --jsx preserve所以--jsx肯定是指定的。

在我的情况下,这是由incremental: truetsconfig.xml 文件引起的。显然在增量模式下tsc可能会忽略该--jsx设置,而是使用以前版本的信息(--jsx仍然禁用)。作为一种解决方案,我暂时关闭了增量编译,重新编译并重新启用它。可能删除构建工件也可能有效。

于 2019-08-24T11:36:10.643 回答
4

我的情况是所有解决方案都不起作用,所以我查看了 ECMA Scrypt 的版本。我的版本是 ec5,你可以在这里查看 -> tsconfig.json。因此,我尝试将其切换target: "es5" target: "es2017"似乎可以解决问题的问题,再次出现任何问题,我将编辑此评论

于 2020-11-30T20:11:58.947 回答
4

在我的情况下重新启动我的 IDE 是修复。重新启动后弹出一个消息框,它显示我没有安装任何 typescript,你想安装 TypeScript 3.3 吗?我安装了它,现在它工作得很好。请参阅此处的输出窗口

于 2019-05-21T07:45:00.893 回答
4

对于使用 Visual Studio 2019 的用户,您可以通过执行以下所有操作来修复它:

  1. 在 tsconfig.json 中,有这部分
"include": [
    "./src/**/*.ts"
]
  1. 更新 Typescript sdkC:\Program Files (x86)\Microsoft SDKs\TypeScript
    我有 4.0 版。我需要通过
    1. 删除 Typescript 文件夹
    2. 在 Visual Studio 2019 中,扩展 > 管理扩展,安装Typescript 4.1 for Visual Studio
于 2021-01-14T10:55:41.980 回答
4

Solution for Sublime Text:

  1. Make sure your package.json uses Typescript >= v4.1.2
  2. Uninstall the Sublime Text "Typescript" package through Package Control
    • At time of writing, it bundles Typescript v3.x
  3. Open a terminal in the Sublime Text "Packages" directory.
    • cd "~/Library/Application Support/Sublime Text 3/Packages"
  4. Clone the Typescript-Sublime-Plugin repo into your Packages directory:
    • git clone https://github.com/microsoft/TypeScript-Sublime-Plugin TypeScript
  5. Open User Settings: Sublime Text > Preferences > Settings
  6. Add "typescript_tsdk": "node_modules/typescript/lib"
    • This tells the Sublime Typescript plugin to use the project version of Typescript rather than its bundled version.
  7. Restart Sublime Text
    • Unlike most Sublime Text settings, this one requires a restart in order to restart the Typescript server.

Reference:
https://github.com/microsoft/TypeScript-Sublime-Plugin/issues/538

于 2021-01-03T16:34:58.720 回答
4

要为所有未来的项目解决这个问题,您可以安装JavaScript and TypeScript NightlyVSCode 的扩展。

于 2020-11-30T19:14:51.683 回答
2

我得到了同样的错误,只是想出了如何解决它。问题是有一个jsconfig.json文件导致 TypeScript 编译器忽略该tsconfig.json文件。

要确定您是否有同样的问题,在您的 IDE(我使用的是 VS Code)中,在您的编辑器中加载一个有错误的文件,然后调出命令面板并输入“TypeScript:转到项目配置”。如果它打开jsconfig.json,则删除该文件并重新启动 IDE。如果它这次打开tsconfig.json文件,你就是黄金。

于 2019-05-21T21:35:00.973 回答
2

我刚刚用我的一个萌芽解决了这个问题,他正在重新安装和重新配置所有该死的东西来解决它。我们尝试了互联网上的所有修复(我什至不得不自己解决这个问题,所以我真的很困惑为什么我们可以为他修复它)。

问题原来是这个TypeScript God扩展。一旦它被禁用并随后被删除,问题就解决了。

当心伪神!

于 2021-02-04T05:20:57.930 回答
2

此链接有助于解决此问题: https ://staxmanade.com/2015/08/playing-with-typescript-and-jsx/

请参阅以下部分:修复错误 TS17004:除非提供了“--jsx”标志,否则无法使用 JSX。

下一个错误对我来说是新的,但它是有道理的,所以我将 --jsx 标志添加到 tsc 并尝试 tsc --jsx helloWorld.tsx,但看起来我错过了 --jsx 的参数。

tsc --jsx helloWorld.tsx 消息 TS6081:“--jsx”的参数必须是“保留”或“反应”。在 TypeScript 1.6 的当前迭代中, --jsx 似乎有两个选项,保留或反应。

preserve 将 jsx 保留在输出中。我认为这是为了让您可以使用 JSX 之类的工具来实际提供翻译。react 将删除 jsx 语法并将其转换为纯 javascript,因此在 TSX 文件中将变为 React.createElement("div", null)。通过传递 react 选项,这就是我们最终的结果:

tsc --jsx react helloWorld.tsx helloWorld.tsx(11,14):错误 TS2607:JSX 元素类不支持属性,因为它没有“props”属性 helloWorld.tsx(11,44):错误 TS2304:不能找到名称“mountNode”。接下来我将解决最后一个错误,因为最初我不理解上面的 JSX 错误。

于 2019-05-11T09:09:42.893 回答
2

重新启动我的 IDE 没有帮助。重新启动 TypeScript 服务器确实解决了它。

于 2020-05-07T00:20:33.903 回答
1

就我而言,我尝试了所有的tsconfig.json、项目属性对话框、重新启动 IDE、检查已安装的 TypeScript 版本等,但仍然出现此错误。来找出使项目向项目文件添加条件属性的开发人员,这样TypeScriptJSXEmit就没有在所有配置中定义(这混淆了项目属性对话框)。

这是我的项目文件的摘录,显示了该问题:

...
  <PropertyGroup Condition="'$(Configuration)' == 'QA'">
    <TypeScriptTarget>ES5</TypeScriptTarget>
    <TypeScriptJSXEmit>React</TypeScriptJSXEmit>
...
于 2019-07-11T14:38:27.593 回答
1

我遵循这里提到的“更简单的解决方案” https://github.com/facebook/create-react-app/issues/10144#issuecomment-733278351

“...将 package.json 中的 TS 版本更新为 4.1.2”

然后重新启动VS Code。

简单地使用命令选项板重新启动 TS 服务器并没有为我做这件事。

我不需要任何其他步骤。

于 2020-12-13T14:54:04.213 回答
1

就我而言,以上都没有奏效。我的问题是 tsconfig.json 的位置不是项目根目录。所以这个玩笑无法读取 .jsx 文件。我解决了它只是将 tsconfig.json 符号链接到项目根目录。可能有更好的解决方案。让我知道你有没有。

于 2020-10-15T08:03:48.083 回答
1

就我而言,重新启动 VSCode 并将 typescript 和 run-scripts 升级到匹配的版本是不够的。删除 .eslintcache 文件后重建终于解决了错误。

于 2021-01-02T13:44:03.327 回答
1

我的经验

我正在按照官方下一个指南转换现有的新创建的 NextJS 应用程序以使用 TS,并且当我到达需要修改 pages/_app.tsx 的部分时。

我按照 VSCode 提示添加了 --jsx 标志,它将以下行添加到 next.config.js 文件中:

module.exports = {
  reactStrictMode: all,
};

这导致了另一个错误:

Failed to load next.config.js, see more info here https://nextjs.org/docs/messages/next-config-error
ReferenceError: all is not defined

从 next.config.js 文件中删除这些行并重新启动 VSCode 并重新运行yarn devornpm run dev和瞧!它开始工作了!

于 2021-11-06T04:34:05.227 回答
1

我有一个 monorepo,对我来说,Webstorm 自动为子包选择了旧版本的 TypeScript。修复方法是单击页脚中的 TypeScript XXXConfigure TypeScript ...并选择正确的包,这在 Webstorm 2021.1 中对我有用

于 2021-06-05T17:12:41.107 回答
1

我不得不将我的整个应用程序添加到include.

所以我的 tsconfig.json 看起来像这样:

{
    "compilerOptions": {
    "module": "commonjs",
    "declaration": true,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "allowSyntheticDefaultImports": true,
    "target": "es6",
    "sourceMap": true,
    "outDir": "./dist",
    "baseUrl": "./",
    "incremental": true,
    "jsx": "react",
    "allowJs": true
  },
  "include": ["./"]
}
于 2020-10-25T14:29:59.503 回答
1

运行yarn start后出现以下错误:

> multi-step-form-typescript@0.1.0 start /home/ehsan/Documents/GitHub/multi-step-form-typescript
> react-scripts start

/home/ehsan/Documents/GitHub/multi-step-form-typescript/node_modules/react-scripts/scripts/utils/verifyTypeScriptSetup.js:239
      appTsConfig.compilerOptions[option] = value;
                                          ^

TypeError: Cannot assign to read only property 'jsx' of object '#<Object>'
    at verifyTypeScriptSetup (/home/ehsan/Documents/GitHub/multi-step-form-typescript/node_modules/react-scripts/scripts/utils/verifyTypeScriptSetup.js:239:43)
    at Object.<anonymous> (/home/ehsan/Documents/GitHub/multi-step-form-typescript/node_modules/react-scripts/scripts/start.js:31:1)
    at Module._compile (internal/modules/cjs/loader.js:1137:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
    at Module.load (internal/modules/cjs/loader.js:985:32)
    at Function.Module._load (internal/modules/cjs/loader.js:878:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
    at internal/main/run_main_module.js:17:47
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! multi-step-form-typescript@0.1.0 start: `react-scripts start`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the multi-step-form-typescript@0.1.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/ehsan/.npm/_logs/2020-11-22T18_20_20_546Z-debug.log

所以你需要做什么才能摆脱这个

在您的终端上单击错误链接

/home/ehsan/Documents/GitHub/multi-step-form-typescript/node_modules/react-scripts/scripts/utils/verifyTypeScriptSetup.js:239 appTsConfig.compilerOptions[option] = value;

然后将 239 行更改为

else if (parsedCompilerOptions[option] !== valueToCheck && option !== "jsx")

现在改变这个 goto tsconfig.json

而不是将“jsx”:“react-jsx”替换为“jsx”:“react”

现在用sudo yarn start运行你的项目

这对我有用,希望这对你也有用:)

于 2020-11-22T19:23:14.387 回答
1

将 { "compilerOptions": { "jsx": "react" } } 添加到 'tsconfig.json' 文件并重新启动编辑器解决了问题。

于 2021-07-29T05:21:56.713 回答
1

这是@basarat 回答的后续行动,因为他部分解决了我的问题。我遇到的问题是error TS6046: Argument for '--jsx' option must be: 'preserve', 'react-native', 'react'。我解决了如下:

  1. 重启你的IDE
  2. 删除你的 tsconfig.json
  3. 使用 ```tsc --init```重新初始化你的 tsconfig.json

也许可以跳过第一步,但我没有对此进行调查。

于 2021-04-27T12:11:40.490 回答
0

您可以在项目的根目录中创建一个 .vscode/settings.json 文件。在它类型{ "typescript.tsdk": "node_modules\\typescript\\lib" }你很高兴去。

问题是 vscode 使用的是旧的 Typescript 版本。

在 vscode 上显示代码的图像

于 2021-05-25T07:12:52.123 回答