React 和 TypeScript 入门
介绍
本指南概述并介绍了使用各种方法使用 TypeScript 构建 React 应用程序。
本指南假设您熟悉如何使用npm工具创建简单的 TypeScript 项目以及安装 npm 软件包。您还应该熟悉 React 开发和支持生态系统,因为它们将在本指南中引用。
例如,要为每个示例创建一个新文件夹,您可以安装 Node.js并运行以下命令:
# ensure node is installed
node -v
npm -v
# create a new folder
mkdir my-typescript-app
# change directory
cd my-typescript-app
# initialize an empty package.json file
npm init
npm init命令创建一个新的package.json文件来存储通过 npm 安装的项目依赖项。
本指南中使用的另一个常用命令是npx命令,它是执行 npm 包的简便方法,无需在每个项目中安装它。
开始使用 Create React App (CRA)
开始使用 TypeScript 和 React 的最快方法是使用 Facebook 自己的Create React App (CRA) 网站生成器。这将生成一个功能齐全的 React 应用,其中内置了许多常用功能,例如 Babel、Webpack、Jest 和热重载开发服务器。
首先,使用create-react-app npm 包生成一个新的 TypeScript 项目my-typescript-app:
# Generate a new React Typescript project
npx create-react-app my-typescript-app --typescript
# wait for installation to be done!
cd my-typescript-app
这将创建一个新文件夹my-typescript-app,它将是你的新项目。npm 安装所需的依赖项可能需要几分钟时间。
现在,你可以通过简单地将.js/.jsx文件重命名为.ts/.tsx来开始使用开箱即用的 TypeScript :
# Rename js to ts
mv src/index.js src/index.ts
# Start development server and watch for changes
npm start
当您修改项目文件时,应用程序将进行热重载,立即反映新的更改。有关如何在现有 React 项目中添加 TypeScript 的信息,请参阅 CRA添加 TypeScript指南。
类型检查测试
目前尚未解决的一个问题是确保您的测试经过类型检查。CRA 将运行基于 TypeScript 的测试,但不会显示任何 TypeScript 编译器错误,从而导致您的开发编辑器与 CRA 测试任务的输出不匹配。这也意味着测试中的 TypeScript 错误不会破坏持续集成构建。
为了确保测试类型检查,您可以添加额外的 npm 脚本:
{
"scripts": {
"test:tsc": "tsc -p tsconfig.test.json -w"
}
}
这将直接在“监视”模式下运行 TypeScript 编译器。-p参数引用您将在项目根目录中创建的新配置tsconfig.test.json :
{
"extends": "./tsconfig.json",
"include": [
"src/**/*.ts",
"src/**/*.test.ts",
"src/**/*.test.tsx",
],
}
我们正在扩展默认的tsconfig.json并明确包含 CRA 构建项目时默认排除的测试文件。
现在您可以在测试时运行这个新的 npm 脚本:
npm run test:tsc
如果您的终端或命令提示符支持拆分输出,则可以更轻松地执行两个命令。
在您的测试中添加类型检查支持可完成为 CRA 设置的 TypeScript,并允许使用功能齐全的 TypeScript 体验来开发 React 应用程序。
从头开始
虽然 CRA 提供了使用常见 React 工具来使用 React 和 TypeScript 的开箱即用体验,但有时还是需要从头开始。如果 CRA 可以被视为“一体化”工具箱,那么您可以认为这种方法就像从锤子和钉子开始,简单但有效。本指南中的其他方法在此基础上通过添加从头开始提供的额外工具、抽象和细节来构建。
要创建支持 React 的新 TypeScript 项目,首先通过npm安装所有必需的依赖项:
npm install react react-dom typescript @types/react @types/react-dom --save
安装软件包后,您需要配置一个新的 TypeScript tsconfig.json文件,以专门支持 JSX 和 React:
{
"compilerOptions": {
// No module system, concatenated file
"module": "none",
// Set React as the JSX factory
"jsx": "react",
// Resolve modules using Node-resolution algorithm
"moduleResolution": "node",
// Target ES6 for more modern browsers
"target": "es6",
// Include typings from built-in lib declarations
"lib": ["es2015", "dom", "dom.iterable"],
// Include module source maps for debugging
"sourceMap": true,
// Output to single concatenated file
"outFile": "dist/bundle.js"
},
"include": ["src"]
}
这将设置一个基本的项目配置来支持 React 和 React DOM。src 中的任何 TS 或 TSX 文件都将被编译。
这里需要强调的是,它不使用模块系统或模块加载器。这会将文件的输出连接成一个,因此不支持导入或导出语法。相反,您必须使用三斜杠指令来引用其他 TypeScript 文件,并且必须在 HTML 页面中包含全局依赖项。
添加新的src/index.tsx文件:
/// <reference path="App.tsx" />
ReactDOM.render(<App />, document.getElementById("root"));
这将使用src/App.tsx中的<App />组件设置我们的 React 应用程序的渲染:
const App = () => <div>Hello React App from scratch</div>;
我们现在可以添加一些新的npm脚本来构建和监视package.json文件中的 TypeScript :
{
"scripts": {
"build": "tsc -p .",
"watch": "tsc -p . -w"
}
}
运行以下命令来构建您的应用程序:
npm run build
这将生成包含连接代码的dist/bundle.js文件。
要查看我们的应用程序,我们需要在项目根目录中创建一个index.html文件,并引用 React 和 React DOM 作为浏览器包,然后引用我们编译的包:
<!DOCTYPE html>
<html>
<head>
<title>React and TypeScript</title>
</head>
<body>
<div id="root"></div>
<!-- Dependencies -->
<script src="https://unpkg.com/react@16.8.2/umd/react.development.js" type="text/javascript"></script>
<script src="https://unpkg.com/react-dom@16.8.2/umd/react-dom.development.js" type="text/javascript"></script>
<!-- Compiled TypeScript -->
<script src="dist/bundle.js" type="text/javascript"></script>
</body>
</html>
我们创建React 将在其中呈现的根元素,并添加对已编译包和其他 CDN 包资源的<script>引用。
您现在可以使用serve npm 包预览该应用程序:
npx serve
导航到终端中显示的 URL 以查看基本应用程序。
使用三斜杠引用适用于小型 TypeScript 项目,但通常对于 Web 应用程序,需要捆绑各种资产,如 CSS、图像和第三方包。这时您可能需要引入模块捆绑器和优化工具。
使用 Webpack 进行打包
Webpack是一款流行的模块打包和优化器。它可以加载多种不同类型的代码,了解它们的依赖关系,并一次性创建引用所有内容的包。
在我们从头创建的同一项目中,添加 webpack 和一个特殊的 TypeScript 模块加载器:ts-loader。
npm install webpack-cli webpack ts-loader --save-dev
此示例将使用ts-loader的简单用法,但<font style="vertical
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~