如何创建基于 TypeScript 的 React 项目

在这里插入图片描述

React 是一个用于构建用户界面的强大 JavaScript 库。结合
TypeScript,您可以获得类型安全和更好的开发体验。本文将详细介绍如何从头开始创建一个基于 TypeScript 的 React
项目。

1. 为什么选择 TypeScript?

在深入创建项目之前,我们先了解一下为什么 TypeScript 对 React 项目如此有益:

  • 类型安全: TypeScript 允许您定义变量、函数参数和返回值的类型,从而在开发过程中捕获许多常见的错误。
  • 更好的代码可维护性: 明确的类型定义使代码更易于理解和维护,尤其是在大型团队项目中。
  • 增强的 IDE 支持: 现代 IDE(如 VS Code)对 TypeScript 有出色的支持,提供自动补全、代码导航和重构功能。
  • 提前发现错误: 在编译阶段就能发现潜在的错误,而不是在运行时才发现。

2. 环境准备

在开始之前,请确保开发环境中安装了以下工具:

  • Node.js: React 项目需要 Node.js 环境来运行。可以从 Node.js 官网 下载并安装。
  • npm 或 Yarn: 包管理器,Node.js 安装时通常会自带 npm。如果喜欢 Yarn,也可以单独安装。

3. 创建 React 项目

最简单和推荐的方式是使用 Create React App (CRA) 来创建一个基于 TypeScript 的 React 项目。CRA 是一个官方支持的工具,可以快速搭建一个配置完善的 React 开发环境。

使用 Create React App

在您的终端中运行以下命令:

npx create-react-app my-ts-react-app --template typescript
# 或者如果您使用 yarn
# yarn create react-app my-ts-react-app --template typescript
  • my-ts-react-app 是项目的名称,可以替换为任何想要的名称。
  • --template typescript 标志告诉 CRA 使用 TypeScript 模板来初始化项目。

命令执行完成后,CRA 会自动安装所有必要的依赖,并创建一个完整的 React 项目结构。

4. 项目结构概览

进入新创建的项目目录:

cd my-ts-react-app

您会看到类似以下的目录结构:

my-ts-react-app/
├── public/
├── src/
│   ├── App.css
│   ├── App.test.tsx
│   ├── App.tsx             // 核心组件
│   ├── index.css
│   ├── index.tsx           // 入口文件
│   ├── react-app-env.d.ts  // TypeScript 类型定义
│   ├── reportWebVitals.ts
│   └── setupTests.ts
├── .gitignore
├── package.json
├── README.md
├── tsconfig.json           // TypeScript 配置文件
└── yarn.lock (或 package-lock.json)

其中几个重要的文件和目录:

  • src/App.tsx:主要 React 组件,在这里编写大部分 UI 代码。
  • src/index.tsx:项目的入口文件,负责渲染根 React 组件。
  • tsconfig.json:TypeScript 的配置文件,在这里调整 TypeScript 的编译选项。
  • react-app-env.d.ts:包含 Create React App 自动生成的类型声明,通常无需修改。

5. 运行项目

现在,您可以运行您的 React 项目了:

npm start
# 或者
# yarn start

浏览器会自动打开 http://localhost:3000,并显示一个默认的 React 应用页面。

6. 编写 TypeScript React 代码示例

现在我们来修改 src/App.tsx,添加一些带有 TypeScript 类型的代码。

import React, { useState } from 'react';
import './App.css';// 定义 Props 的接口
interface WelcomeProps {name: string;age?: number; // 可选属性
}// 函数组件使用 React.FC<Props> 或 (props: Props) => JSX.Element
const Welcome: React.FC<WelcomeProps> = ({ name, age }) => {return (<div><h1>Hello, {name}!</h1>{age && <p>You are {age} years old.</p>}</div>);
};function App() {const [count, setCount] = useState<number>(0); // useState 明确指定类型const increment = (): void => { // 函数返回类型为 voidsetCount(prevCount => prevCount + 1);};return (<div className="App"><header className="App-header"><Welcome name="TypeScript User" age={30} /><Welcome name="Guest" /> {/* 不传入 age 也是允许的 */}<p>Count: {count}</p><button onClick={increment}>Increment</button></header></div>);
}export default App;

代码解释:

  • interface WelcomeProps 我们定义了一个接口来描述 Welcome 组件接收的 props。这使得代码更具可读性,并且在您使用 Welcome 组件时会获得类型检查。
  • age?: number; ? 表示 age 是一个可选属性。
  • const Welcome: React.FC<WelcomeProps> = (...) 推荐使用 React.FC(Function Component)泛型来为函数组件指定 props 类型。
  • useState<number>(0) 在使用 useState 时,您可以通过泛型参数明确指定 state 的类型,尽管 TypeScript 通常能够推断出简单类型的类型。
  • increment: (): void => { ... } 显式声明函数的返回类型为 void,表示它不返回任何值。

7. 额外的 TypeScript 配置(可选)

tsconfig.json 文件是 TypeScript 项目的核心配置文件。CRA 已经为您配置了一个合理的默认值,但您可能需要根据项目需求进行一些调整。

一些常用的配置项:

  • "target": "es5" 指定编译后的 JavaScript 版本。通常保持为 es5 以获得更好的浏览器兼容性。
  • "jsx": "react-jsx" 指定 JSX 的处理方式。
  • "strict": true 启用所有严格的类型检查选项,强烈推荐开启,这有助于编写更健壮的代码。
  • "baseUrl": "src" 允许您进行模块路径别名设置,例如 import SomeComponent from 'components/SomeComponent'

可以查阅 TypeScript 文档 了解更多 tsconfig.json 的配置选项。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/87748.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/87748.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Adobe LiveCycle Designer 中脚本的层级关系

以下是Adobe LiveCycle Designer脚本体系的层级关系对比分析,结合执行时机、作用域、交互规则及典型应用场景进行系统性说明: 1. 脚本体系层级关系总览 #mermaid-svg-4ZAgQFvRk9BQdPuM {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:…

在汽车中实现时间敏感网络(TSN)

随着车内以太网应用的不断扩展,精确的时间同步与可靠的数据传输变得至关重要。IEEE 802.1AS™ 提供了亚微秒级的高精度时间同步能力,这一特性将在未来汽车通信系统中发挥关键作用。 此外,其他 IEEE 标准和 TSN 技术共同支持在整个车辆范围内实现安全、超高可靠性、低延迟有…

暑假读书笔记第一天

今日文章&#xff1a; 小林coding&#xff1a;CPU 是如何执行程序的&#xff1f; 目录 内存中央处理器指令及其周期指令类型MIPS指令类型指令周期 指令的执行速度 冯诺依曼计算机遵循了图灵机的设计,使用了电子元件构造,约定了用二进制进行计算和存储 图灵机基本由纸带和和读…

洛谷刷题9

B4355 [GESP202506 一级] 值日 B4355 [GESP202506 一级] 值日 - 洛谷 难度&#xff1a;入门 —— 入门 这道题有三种解法&#xff0c;第三种解法在一部分比赛中被禁用 AC代码&#xff08;第一种方法&#xff1a;循环&#xff09; #include <iostream> #include <…

vuedraggable在iframe中无法使用问题

废话不多说 直接看怎么解决 <draggable:list"staticContent":animation"340"group"selectItem"handle".option-drag"start"onDragStart"end"onDragEnd" ><divv-for"(item, index) in staticConten…

数据库窗口函数详解:语法、技巧与最佳实践

数据库窗口函数详解&#xff1a;语法、技巧与最佳实践 窗口函数是SQL中用于执行复杂分析的强大工具&#xff0c;它允许在结果集的"窗口"&#xff08;一组相关行&#xff09;上进行计算&#xff0c;而不会将行分组为单个输出行。下面我将全面解析窗口函数的语法、应用…

基于开源AI大模型AI智能名片S2B2C商城小程序源码的企业资金使用效率提升路径研究

摘要&#xff1a;在中国创业市场&#xff0c;需求验证后的激烈竞争与投资方对收益率和确定性的严苛要求&#xff0c;迫使企业必须实现资金使用的极致效率。开源AI大模型AI智能名片S2B2C商城小程序源码的技术融合&#xff0c;通过重构用户触达、供应链协同与运营流程&#xff0c…

2025年- H92-Lc200-- 64.最小路径和(多维动态规划)--Java版

1.题目描述 2.思路 &#xff08;1&#xff09;dp[i][j] 表示从起点 (0,0) 走到位置 (i,j) 的最小路径和 &#xff08;2&#xff09;对于位置 (i, j)&#xff0c;只能从 上面 (i-1,j) 或 左边 (i,j-1) 走过来&#xff0c;所以&#xff1a; dp[i][j] grid[i][j] min(dp[i-1][j…

CHAIN(GAN的一种)训练自己的数据集

简介 简介:作者针对数据有限场景下GANs训练中的判别器过拟合问题,提出了CHAIN(Lipschitz连续性约束归一化)方法。作者首先从理论角度分析了GAN泛化误差,发现减少判别器权重梯度范数对提升泛化能力至关重要。然后深入研究了批归一化(BN)在GAN判别器中应用困难的根本原因…

3D建模公司的能力与技术

在数字化时代&#xff0c;3D建模公司扮演着越来越重要的角色。它们是专业从事三维建模设计服务的机构或团队&#xff0c;利用先进的三维建模软件和技术&#xff0c;为客户提供从概念设计到最终成品的全流程服务。这些服务广泛应用于建筑设计、工程规划、产品设计、动画制作等多…

《深度剖析:5G网络切片如何精准保障不同业务QoS需求》

5G网络切片技术依托网络功能虚拟化(NFV)和软件定义网络(SDN)两大核心技术。NFV就像一位神奇的变形师,把传统硬件网络功能,如路由器、防火墙、基站等,转化为软件模块,让它们能运行在通用硬件平台上。如此一来,硬件资源得以摆脱传统网络功能的束缚,实现灵活调配。例如,…

力扣hot100题(1)

目录 1、两数之和2、移动零3、相交链表4、有效的括号5、反转链表6、回文链表7、环形链表8、环形链表II9、合并两个有序链表10、二叉树的中序遍历 1、两数之和 1. 两数之和 - 力扣&#xff08;LeetCode&#xff09; 方法1&#xff1a; class Solution {public int[] twoSum(i…

C++的回顾与学习之C++入门基础

目录 1、C入门 1&#xff09;C关键字 2&#xff09;命名空间 3&#xff09;C中的输入输出 4&#xff09;缺省参数 5&#xff09;函数重载 6&#xff09;引用 引用和指针的不同点&#xff1a; 7&#xff09;auto关键字 8&#xff09;内联函数 9&#xff09;指针空值nu…

【使用Android Studio调试手机app时候手机老掉线问题】

如果你各种方式都尝试失败了&#xff0c; 请看这里 连接时候通过logcat查看你手机Android的平台去SDK下载所有对应的平台SDK重新连接尝试

二叉树题解——验证二叉搜索树【LeetCode】前序遍历

98. 验证二叉搜索树 &#x1f50d; 题目目标 判断一棵二叉树是否为有效的二叉搜索树&#xff08;BST&#xff09;&#xff0c;定义如下&#xff1a; 左子树所有节点 < 根节点 右子树所有节点 > 根节点 且左右子树也必须是二叉搜索树 一、算法逻辑&#xff08;逐步通…

Javaweb - 10.3 Servlet 生命周期

目录 生命周期简介 生命周期测试 load-on-startup 补充&#xff1a;defaultServlet Servlet 的继承结构 1. 顶级的 Servlet 接口 2. 抽线的类 GenericServlet 3. HttpServlet 抽象类 4. 自定义 Servlet 补充&#xff1a; 完&#xff01; 生命周期简介 什么是生命周…

RSA数字签名方案的C语言实现(带测试)

RSA 算法的 C语言实现通常比较复杂&#xff0c;但已经有许多密码算法库实现了 RSA 算法&#xff0c;例如OpenSSL、Libgcrypt​ 和 Botan ​等。我们可以在这些库的基础上进行配置或移植&#xff0c;从而快速实现密码算法。但这些库主要面向大量设备进行优化&#xff0c;如通用计…

创客匠人视角:知识变现与创始人 IP 打造的破局之道

当知识付费从流量红利期进入精耕细作阶段&#xff0c;为何专业能力强的内容创作者反而难以变现&#xff1f;创客匠人通过 1500 案例陪跑发现&#xff1a;缺乏 IP 思维的知识输出如同雾中航行&#xff0c;而创始人 IP 打造正是连接知识价值与商业变现的核心桥梁。一、定位重构&…

结构分析设计软件 SCIA Engineer 25.0 x64

详情 Nemetschek SCIA Engineer是一家从事多项目编程、分析和软件设计的公司。该软件具有广泛的不同功能。该软件可用于以简单的方式设计建筑物、工业工厂和桥梁。 Nemetschek SCIA Engineer软件的特点和功能&#xff1a; BIM模型人 使用网格和故事 3D风 自由负载 互联网…

怎么处理[TOO_MANY_REQUESTS/12/disk usage exceeded flood-stage watermark

这个错误说明 Elasticsearch 的磁盘空间严重不足&#xff0c;已触及最高级别&#xff08;flood-stage&#xff09;的水位线。作为自我保护机制&#xff0c;Elasticsearch ​自动将受影响的索引设置为只读模式 (read-only-allow-delete)​&#xff0c;从而阻止写入操作&#xff…