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

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

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

我的基本TSX文件

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

export default Users;

当前回答

添加

import React from 'react'

修复此问题

其他回答

我在这里的问题与typescript相关,与本文中已经发布的解决方案类似,但并不完全相同。

出了什么问题

我添加了带有源代码的嵌套目录,这些源代码没有包含在我的tsconfig.json中。

解决方案

以下是我如何修复它,简单地添加额外的.ts和.tsx路径包括,例如。

// tsconfig.json
{
  "include": [
    "next-env.d.ts",
    "**/*.ts",
    "**/*.tsx",
    "**/**/*.ts",
    "**/**/*.tsx"
    "<path-to-your-source>.ts",
    "<path-to-your-source>.tsx",
  ],
}

我的特殊项目是一个Next.js项目。以下是完整的tsconfig.json:

{
  "compilerOptions": {
    "sourceMap": true,
    "outDir": "dist",
    "strict": true,
    "lib": [
      "esnext"
    ],
    "esModuleInterop": true,
    "target": "es5",
    "allowJs": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true,
    "noEmit": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "jsx": "preserve",
    "incremental": true
  },
  "include": [
    "next-env.d.ts",
    "**/*.ts",
    "**/*.tsx",
    "**/**/*.ts",
    "**/**/*.tsx"
  ],
  "exclude": [
    "node_modules"
  ]
}

上述绝大部分tsconfig。json是通过Next.js生成的

我错误地给出了index。Ts组件的名称。

└── components/
    └── Dialog/
        ├── Dialog.tsx
        └── Dialog.ts // This needs to be index.ts

将名称改回index。它解出来了。

对我来说,这和这一切都无关。

我用的是Visual Studio Code,打开的文件夹不是在有tsconfig的根目录下。Json文件,但在SRC文件夹内的一个级别。

解析错误:无法读取文件:C\MyProject\tsconfig.json.eslint

这间接导致'React'指的是UMD全局,但当前文件是一个模块

在项目级重新打开文件夹解决了这个问题。: \

添加

import React from 'react'

修复此问题

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

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