在 create-react-app 中 EXTEND_ESLINT=true 时打字稿解析错误

Typescript parsing error when EXTEND_ESLINT=true in create-react-app

Stripped down demonstration - GitHub

我们目前有一个 create-react-app 项目,该项目正在进行从 Flow 到 Typescript 的增量迁移。这意味着禁用一些不需要的 ESLint 规则。为了自定义 ESLint,我在 .env 文件中添加了 EXTEND_ESLINT=true

在添加此设置之前,我的 Typescript 代码可以正常编译。之后,我在某些(但不是全部)Typescript 语法上遇到解析错误。

// Type guards
export function f0<T>(x: T|undefined): x is T { ...

// Constrained generics
export function f1<T extends number>(x: T) { ...

// Type assertions
... return x as T

可能还有其他无法识别的语法我还没有找到。

到目前为止

解决方案

备注

更新

对于遇到此问题的任何其他人,open issue at CRA 似乎是原因。

更新:至少将 react-scripts 更新到最新版本 3.4.1。 已修复。

对于 3.4.1 之前的 react-scripts 版本,

打开node_modules/react-scripts/config/webpack.config.js

用此代码替换第 365 行的代码块。

  if (process.env.EXTEND_ESLINT === 'true') {
    return undefined
  } else {
    return {
      extends: [require.resolve('eslint-config-react-app')],
    };
  }
})(),
useEslintrc: process.env.EXTEND_ESLINT === 'true',

现在,如果您通过 yarn 或 npm 启动您的应用程序,您会看到它已修复。

这里最初介绍了修复

https://github.com/facebook/create-react-app/issues/7776#issuecomment-567587642

运行 npx patch-package react-scripts 为它打个补丁。 并将 "postinstall": "patch-package" 添加到您的 package.json 脚本部分。

补丁将在npm install

后自动应用