在一个create-react-app的typescript项目中,我试着写这个,只是为了快速测试一些东西:

// experiment.test.ts
it('experiment', () => {
  console.log('test');
});

但它给了我以下错误,在它下面有一个红色的弯弯曲曲:

当提供了'——isolatedModules'标志时,所有文件都必须是模块。

然而,如果我将文件更改为如下所示,那么一切显然都很好(当然,除了未使用的导入):

// experiment.test.ts
import { Component} from 'react'; // literally anything, don't even have to use it

it('test', () => {
  console.log('test');
});

为什么?这里发生了什么?——isolatedModules实际上意味着什么?


当前回答

Typescript将没有导入/导出的文件视为遗留脚本文件。因为这样的文件不是模块,它们的任何定义都被合并到全局命名空间中。isolatedModules禁止这样的文件。

向文件添加任何导入或导出都可以使其成为模块,错误就会消失。

export{}也是一种不需要导入任何东西就能使文件成为模块的方便方法。

其他回答

不如就这样吧 .eslintignore 在eslint中添加你需要忽略的文件夹,这样就不会出现错误——任何导入都可以修复isolatedModules错误 你可以测试你的逻辑

Typescript将没有导入/导出的文件视为遗留脚本文件。因为这样的文件不是模块,它们的任何定义都被合并到全局命名空间中。isolatedModules禁止这样的文件。

向文件添加任何导入或导出都可以使其成为模块,错误就会消失。

export{}也是一种不需要导入任何东西就能使文件成为模块的方便方法。

这是因为您还没有导入要测试的函数。一旦你这样做了,错误就会消失。公认的答案解释了其中的原因。

正确的方法是告诉TypeScript你想要什么。如果你不想要isolatedModules,创建tsconfig。Json到你的测试目录,并添加:

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "isolatedModules": false
  },
}

添加“isolatedModules”:配置为true,然后通过添加空的export{}来欺骗TypeScript检查器,让我觉得代码很糟糕。

解决问题,见文章https://blog.csdn.net/qingfeng812/article/details/120510673

{
  "compilerOptions": {
    "target": "es5",
    "lib": [
      "dom",
      "dom.iterable",
      "esnext"
    ],
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "noFallthroughCasesInSwitch": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": false,
    "noEmit": true,
    "jsx": "react-jsx"
  },
  "include": [
    "src"
  ]
}