如何使用 Create React App 和 TypeScript 启用可选链

Haf*_*uri 21 typescript babeljs create-react-app

当前未启用对实验性语法“optionalChaining”的支持

我收到了上述错误。我关注了这篇文章并添加"@babel/plugin-proposal-optional-chaining": "^7.7.4"到我的devDependencies.

然后我收到这个错误,

将 @babel/plugin-proposal-optional-chaining ( https://git.io/vb4Sk ) 添加到 Babel 配置的“插件”部分以启用转换。

所以我按照这篇文章并将.babelrc文件添加到我的项目根目录中

{
    "presets": ["react", "es2015","stage-1"],
    "plugins": ["transform-runtime", "transform-optional-chaining"]
}
Run Code Online (Sandbox Code Playgroud)

这似乎没有做任何事情。我也听到有人提到Create React App不允许你修改 babel 的配置。所以我的问题是如何在不重新布线情况下启用可选链接CRA

PS我正在使用"typescript": "^3.7.2",或者至少我是这么package.json说的。我试图npm install确保它已更新。不确定是否CRA在下面做一些奇怪的事情并TypeScript以某种方式使用旧版本。


编辑: 当我用 开始项目时CRA,我相信我们正在使用TypeScript: 3.6.x. 我想使用Optional Chaining,所以我将package.json文件更改为"typescript": "^3.7.2"then npm install。我认为问题是,TypeScript知道我正在使用3.7.2,但CRA仍然有较旧的配置,我不确定如何更新它。

Luk*_*keP 27

Create-React-App 使用 babel 来转译 TypeScript,所以它不使用你安装的 TypeScript 版本。react-scripts 3.3.0 版支持 TypeScript 3.7。您可以安装它并将其用于:

  • yarn add react-scripts@3.3.0

    -或者-

  • npm install -s react-scripts@3.3.0

  • 您可以在不使用 TS 的情况下在“react-scripts 3.3.0”上使用可选链吗? (2认同)

Med*_*uly 7

包.json

{
  "scripts": {
    "start": "react-app-rewired start",
    "build": "react-app-rewired build",
    "test": "react-app-rewired test --env=jsdom"
  },
  "devDependencies": {
    "@babel/plugin-proposal-optional-chaining": "^7.2.0",
    "customize-cra": "^0.4.1",
    "react-app-rewired": "^2.1.3"
  }
  ...other
}
Run Code Online (Sandbox Code Playgroud)

config-overrides.js

const { useBabelRc, override } = require('customize-cra');
module.exports = override(useBabelRc());
Run Code Online (Sandbox Code Playgroud)

.babelrc

{
  "plugins": ["@babel/plugin-proposal-optional-chaining"]
}
Run Code Online (Sandbox Code Playgroud)

详细的博文


Eli*_*old 7

React 脚本 3.3.0 及更高版本支持它。无需安装 react-scripts@next。

只需放入 package.json"react-scripts": "^3.3.0"就可以了。

  • 好吧,我不再与我为其进行 React 应用程序配置的公司合作。所以我真的不能轻易测试这个。但很高兴知道。这可能对未来的读者有所帮助。 (2认同)