tsconfig noEmit必须为true

时间:2020-04-17 07:46:40

标签: typescript create-react-app

我正在使用create-react-app,并且我还有一些ts和tsx文件。在我的tsconfig文件中(见下文),我将noEmit设置为false,因为需要发出js文件。但是,每次启动服务器时,noEmit都会设置为false,并显示以下消息:

The following changes are being made to your tsconfig.json file:
   - compilerOptions.noEmit must be true

将noEmit设置为false时,不会生成应从我的ts文件生成的js文件,这意味着该应用程序未更新。是什么导致这种行为?有什么办法可以避免呢?还是为包含ts文件的文件夹制作单独的tsconfig的唯一选择?

{
  "compilerOptions": {
    "target": "ES2017",
    "module": "esnext",
    "lib": [
      "dom",
      "dom.iterable",
      "esnext",
      "ES2017"
    ],
    "allowJs": false,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "forceConsistentCasingInFileNames": true,
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "jsx": "preserve",
    "strictPropertyInitialization": false,
    "strictNullChecks": false,
    "strict": true,
    "sourceMap": true,
    "noEmit": true
  },
  "include": [
    "src"
  ],
  "exclude": [
    "node_modules"
  ]
}

3 个答案:

答案 0 :(得分:1)

您需要在 webpack.config 文件中覆盖此编译选项,如下所示:

rules: [
     {
        test: /\.tsx?$/,
        loader: 'ts-loader',
        options: {
           compilerOptions: {
              "noEmit": false
           }
        },
        exclude: /node_modules/,
      },

答案 1 :(得分:1)

您可以在命令执行后从 react-script 恢复文件更改。

就我而言,这是让我产生问题的测试脚本。所以我将此添加到我的 package.json 文件中:

  [...]
  "scripts": {
    "pretest": "cp tsconfig.json tsconfig.json.save",
    "posttest": "mv tsconfig.json.save tsconfig.json",
    [...]
  }

但是,如果您的测试失败,文件不会重命名为其原始文件名

答案 2 :(得分:0)

如果你使用 VS Code,必须创建一个名为 tsconfig-watch.json 的 tsconfig.json 文件的副本,并像下面的代码一样更改 .vscode 文件夹中的 task.json 文件。

<块引用>

在 tsconfig-watch.json 文件中,你必须设置 "noEmit": false

    {
        "label": "tsc: watch",
        "type": "typescript",
        "tsconfig": "tsconfig-watch.json", //!important
        "option": "watch",
        "runOptions": {
            "runOn": "folderOpen"
        },
        "problemMatcher": [
            "$tsc-watch"
        ]
    }