7

精简演示 - GitHub

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

在添加此设置之前,我的 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

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

至今

  • 我没有发现任何类似的问题或错误报告。我了解某些 Typescript 功能在当前 CRA 版本中不可用,例如const enum,但我没有发现任何提及上面列出的功能。我也很确定我的Typescript 和 ESLint 版本typescript-eslint.

  • 我尝试了许多不同的.eslintrc组合。我.eslintrc.js在附加存储库的文件中留下了一些最有前途的。当前设置是create-react-app 推荐的设置,其中 Typescript linting 在该overrides部分中设置。

  • ESLint Typescript 配置是按照 monorepo 的说明设置的typescript-eslint特别是typescript-eslint/parsertypescript-eslint/eslint-plugin

解决方案

  • 弹出不是一种选择。如果找不到其他解决方案,我宁愿一次性完成 Flow -> TS 转换。

  • 我们目前使用customize-cra扩展我们的 CRA 配置。欢迎涉及此问题的解决方案。

  • 我喜欢它给我的灵活性,.eslintrc但我很乐意取消它,前提是我仍然可以设置 lint 规则。

笔记

  • 我已经包含customize-cra在演示 repo 中以准确反映我们的项目,但问题仍然存在customize-cra,表明它可能不是罪魁祸首。

  • 有关src/components/TestComponent/fn.ts问题语法的示例,请参阅。

  • 我目前的假设是 CRA ESLint 配置中有一些设置在EXTEND_ESLINT=true.

更新

4

2 回答 2

3

更新:将 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

于 2019-12-30T15:55:36.297 回答
0

对于遇到此问题的其他人,CRA 有一个未解决的问题,这似乎是原因。

于 2019-11-13T23:51:22.233 回答