如何創建基于 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
英文地址,請注明出處:http://en.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…