当前,我们有一个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
,但是我没有发现上面列出的功能。我也敢肯定我的打字稿及ESLint版本兼容使用typescript-eslint
。
我尝试了许多不同的.eslintrc
组合。我.eslintrc.js
在附件存储库中的文件中保留了一些最有前途的东西。当前设置是create-react-app建议的设置,本overrides
节中设置了Typescript棉绒。
所述ESLint打字稿配置成立以下从指令typescript-eslint
monorepo,特别地,typescript-eslint/parser
和typescript-eslint/eslint-plugin
解决方案
退出不是一种选择。如果找不到其他解决方案,我宁愿一次性执行Flow-> TS转换。
目前,我们通过custom-cra扩展了CRA配置。欢迎使用与此相关的解决方案。
我很喜欢它.eslintrc
给我带来的灵活性,但是如果我仍然可以设置皮棉规则,我很乐意取消它。
笔记
我已包含customize-cra
在演示仓库中以准确反映我们的项目,但是如果没有问题仍然存在customize-cra
,则表明这可能不是罪魁祸首。
请参阅src/components/TestComponent/fn.ts
以获取问题语法的示例。
我当前的假设是CRA ESLint配置中有一些设置不会在when保留EXTEND_ESLINT=true
。
更新
更新:将react-scripts更新到至少3.4.1。它是固定的。
对于3.4.1之前的版本的反应脚本,
打开 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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句