我更新了我的项目来创建react应用程序4.0,我正在缓慢地移动我的文件到TypeScript。我知道有了这个新版本,你不必重复地从“React”导入React。然而,在我没有导入React的所有TS文件中,我收到了这个错误:

'React'指的是一个UMD全局,但当前文件是一个模块。 考虑添加一个导入来代替。ts(2686) '

我知道我可以通过导入React来修复它,但我认为这已经不再需要了。另外,有人能解释一下这个错误的含义吗?

我的基本TSX文件

const Users = () => {
    return <>Teachers aka Users</>;
};

export default Users;

当前回答

Dan写的是正确的,你可以修改TS config.json:

// tsconfig.json
{
  "compilerOptions": {
    ...
    "jsx": "react-jsx"
    ...
  },
}

或者只是在给你错误的文件组件中导入React:

import React from 'react'

其他回答

添加

import React from 'react'

修复此问题

这个错误消息来自TypeScript编译器。Typescript 4.0目前不支持React 17新的jsx转换,但4.1将会支持。

TypeScript v4.1 Beta - React 17 JSX工厂

Create React App在版本4中支持新的JSX转换,但如果你使用的是自定义设置,那么在编写JSX而没有从' React '中导入React时,需要以下步骤来删除TypeScript错误:

至少4.1版本的Typescript React和React -dom至少版本17 tsconfig。json必须有一个jsx的编译选项react-jsx或react-jsxdev

例子:

// tsconfig.json
{
  "compilerOptions": {
    ...
    "jsx": "react-jsx"
    ...
  },
}

TypeScript支持React 17 JSX工厂的文档可以在这里找到

我遇到了这个问题,并最终意识到更改tsconfig。如果你设置了ts-jest, Json就不能工作。确保你的ts-jest设置为:

module.exports = {
  ...
  globals: {
    ...
    "ts-jest": {
      ...
      tsconfig: {
        ...
        jsx: "react-jsx", // *** HERE ***
        ...
      },
    },
  },
  ...
};

我有这种情况发生时,文件是在项目的根,而不是src文件夹使用Create React应用程序。