“React”是指 UMD 全局,但当前文件是一个模块

我更新了我的项目以创建react app 4.0,并且我正在放慢将文件移动到TypeScript的速度。我知道有了这个新版本,你不必重复地从'react'导入React。但是,在我没有导入 React 的所有 TS 文件中,我收到以下错误:

“React”是指 UMD 全局,但当前文件是一个模块。考虑添加一个 import 而不是 .ts(2686)'

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

我的基本 TSX 文件

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

export default Users;

答案 1

Create React App 支持版本 4 中开箱即用的新 JSX 转换,但如果您使用的是自定义设置,则需要以下内容来删除在没有的情况下编写的 TypeScript 错误:jsximport React from 'react'

  • typescript至少 4.1 版
  • react和至少版本 17react-dom
  • tsconfig.json必须具有编译器选择或jsxreact-jsxreact-jsxdev

例:

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

TypeScript 文档支持 React 17 JSX Factories,可以在这里找到


答案 2

此错误消息来自 TypeScript 编译器。React 17 新的 jsx 转换目前在 Typescript 4.0 中不受支持,在 4.1 中将受支持。

TypeScript v4.1 Beta - React 17 JSX Factory