我找到了一种将create-react-app从javascript迁移到打字稿的解决方案,这种方式 不需要 弹出。
- 通过运行命令使用打字稿创建一个临时react项目
create-react-app --scripts-version=react-scripts-ts
(注意-需要create-react-app
全局安装) - 在您自己的项目中-在
package.json
文件下删除react-scripts
react-scripts-ts
通过运行命令添加到您的项目,yarn add react-scripts-ts
或者如果您正在使用npm,则添加npm install react-scripts-ts
。或者,添加"react-scripts-ts": "2.8.0"
到package.json。- 从您在步骤1中创建的项目中,将文件:复制
tsconfig.json, tsconfig.test.json tslint.json
到您自己的项目中 - 在自己的项目中
package.json
,根据脚本部分,将react-scripts
实例react-scripts-ts
(应该是下start
,build
,test
和eject
- 安装分型为通过安装使用纱或NPM以下模块反应:
@types/node
,@types/react
和@types/react-dom
。devDependencies
如果使用package.json,请放在部分中。 - 将
index.js
文件名更改为index.tsx
- 在您的tsconfig.json文件中,添加以下配置:
"allowSyntheticDefaultimports": true
- 有关更多信息
注意 步骤7可能需要进行其他修改,具体取决于index.js文件中的内容(如果它取决于项目中的JS模块)。
现在,您可以运行您的项目,它可能会工作,对于那些遇到
You may need an appropriate loader to handle thisfiletype有关.js文件错误的人来说,它发生是因为babel不知道如何从.tsx文件中加载.js文件。我们需要做的是更改项目配置。我发现不运行
eject就可以使用react-
app-rewired包。该软件包可让您配置外部配置,该配置将被添加/覆盖默认项目设置。我们将使用babel加载这些类型的文件。让我们继续:
react-app-rewired
使用yarn或npm 安装软件包- 在您的根文件夹(
package.json
位于其中)中创建一个新文件,名称为config-overrides.js
- 将此代码放在
config-overrides
文件中:
var paths = require('react-scripts-ts/config/paths') module.exports = function override(config) { config.module.rules.push({ test: /.(js|jsx)$/, include: paths.appSrc, loader: require.resolve('babel-loader'), options: { babelrc: false, presets: [require.resolve('babel-preset-react-app')], cacheDirectory: true, }, }) return config }编辑的package.json所以
start/start-js,
build,
test,和
eject脚本使用反应-APP-
重新接线如图所示项目自述。例如
"test": "react-app-rewired test --scripts-version react-scripts-ts --env=jsdom"。
现在您可以启动项目,并且应该解决问题。您可能需要根据项目(其他类型等)进行其他修改。
希望能帮助到你
如注释中的建议,可以定义:
"compilerOptions": { "allowJs":true}在tsconfig.json文件中,因此您可以混合JS和TS,而无需react-app-rewired。谢谢提这个!更新: create-react-app版本2.1.0支持打字稿,因此对于那些从头开始的人来说,您可以使用它来创建带有打字稿的新应用程序,并且根据文档,应使用以下命令来完成:
$ npx create-react-app my-app --typescript
对于现有项目,在更新到版本2.1.0之后,使用以下命令将以下软件包添加到项目的依赖项中:
$ npm install --save typescript @types/node @types/react @types/react-dom @types/jest
然后您可以简单地将.js重命名为.ts文件。



