当前位置:首页 > 文章列表 > 文章 > 前端 > TypeScript + React 实战

TypeScript + React 实战

2026-08-21 02:59:32 0浏览 收藏

TypeScript 为 React 开发提供完整的类型支持,提高代码可靠性。

TypeScript + React 实战

使用 TypeScript 可以让 React 组件、Props、State 等都有完整的类型检查,减少运行时错误。

React 教程查看:https://www.runoob.com/vue3/react-tutorial.html

React + TypeScript 类型支持React 组件React.FCinterface ButtonProps {text: stringReact HooksuseState(initial)useEffect(() => {}, [])useCallback(fn)事件处理React.FormEventReact.ChangeEventReact.MouseEventTypeScript 带来的优势编译期类型检查智能代码补全重构更安全

为什么需要在 React 中使用 TypeScript

React 组件化开发会产生大量的 Props、State、Context 等数据流。

没有类型定义时,很难追踪数据的来源和结构,容易出现运行时错误。

TypeScript 给 React 补上了一整套清晰的类型系统:组件的 Props 可以做类型校验,useState 能自动推断类型,事件处理时也会有明确的类型提示。

数据流:在 React 里,不管是 Props、State,还是 Context,这几条核心数据通道都离不开清晰的类型定义;而 TypeScript 的价值就在这里,它能把数据流的类型安全稳稳兜住。

创建项目

使用现代脚手架创建支持 TypeScript 的 React 项目。

初始化

# 使用 Create React App(较慢但完整)
npx create-react-app my-app --template typescript
# 或使用 Vite(推荐,更快)
npm create vite@latest my-app -- --template react-ts

推荐:Vite 是目前最推荐的 React 构建工具,速度快,开发体验好。

组件类型

使用 React.FC 类型定义函数组件。

src/components/Button.tsx

import React from "react";
// 定义按钮组件的 Props 类型
interface ButtonProps {
    text: string;                    // 按钮文字(必填)
    onClick: () => void;             // 点击回调(必填)
    disabled?: boolean;              // 是否禁用(可选,默认 false)
    variant?: "primary" | "secondary"; // 按钮变体(可选)
}
// 使用 React.FC 定义函数组件类型
const Button: React.FC = ({
    text,
    onClick,
    disabled = false,
    variant = "primary"
}) => {
    return (
        
    );
};
export default Button;

运行结果:

Button 组件渲染成功

React.FC:这是 React 函数组件的类型,包含了 children、propTypes 等内置类型。

Props 类型

定义组件的 Props 接口,传递数据给子组件。

src/components/UserCard.tsx

import React from "react";
// 定义用户类型
interface User {
    id: number;           // 用户 ID
    name: string;        // 用户名
    email: string;       // 邮箱
    a vatar?: string;     // 头像(可选)
}
// 定义用户卡片组件的 Props
interface UserCardProps {
    user: User;                       // 用户对象(必填)
    onEdit: (user: User) => void;    // 编辑回调
    onDelete: (id: number) => void;  // 删除回调
}
const UserCard: React.FC = ({ user, onEdit, onDelete }) => {
    return (
        
{user.a vatar && {user.name}}

{user.name}

{user.email}

); }; export default UserCard;
类型传递:通过 Props 传递类型,确保整个组件树的数据类型一致。

useState 类型

为 useState 提供类型参数,确保状态类型正确。

src/components/Counter.tsx

import React, { useState } from "react";
const Counter: React.FC = () => {
    // 基础类型:显式指定 number 类型
    const [count, setCount] = useState(0);
    // 对象类型:指定对象类型
    const [user, setUser] = useState({
        name: "Alice",
        age: 25
    });
    return (
        

计数: {count}

用户: {user.name}, {user.age}

); }; export default Counter;

运行结果:

Counter 组件渲染成功

泛型参数:useState 中的 T 就是状态的类型,如果提供初始值,TypeScript 可以自动推断。

useEffect 类型

useEffect 同样有完整的类型支持。

src/components/DataFetcher.tsx

import React, { useState, useEffect } from "react";
// 定义用户类型
interface User {
    id: number;
    name: string;
}
const DataFetcher: React.FC = () => {
    // 用户列表状态
    const [users, setUsers] = useState([]);
    // 加载状态
    const [loading, setLoading] = useState(true);
    // 错误状态
    const [error, setError] = useState(null);
    useEffect(() => {
        // 模拟获取数据
        fetch("/api/users")
            .then(res => res.json())
            .then(data => {
                setUsers(data);
                setLoading(false);
            })
            .catch(err => {
                setError(err.message);
                setLoading(false);
            });
    }, []);  // 空依赖数组:只在组件挂载时执行一次
    if (loading) return 
加载中...
; if (error) return
错误: {error}
; return (
    {users.map(user => (
  • {user.name}
  • ))}
); }; export default DataFetcher;

依赖数组:useEffect 的第二个参数是依赖数组,TypeScript 会检查回调中使用的变量是否都已在数组中声明。

事件处理

React 事件有专门的类型定义。

src/components/Form.tsx

import React, { useState } from "react";
const Form: React.FC = () => {
    // 字符串类型的状态
    const [name, setName] = useState("");
    // 表单提交事件处理
    const handleSubmit = (e: React.FormEvent) => {
        e.preventDefault();  // 阻止表单默认提交
        console.log("提交:", name);
    };
    // 输入框变化事件处理
    const handleChange = (e: React.ChangeEvent) => {
        setName(e.target.value);
    };
    return (
        
); }; export default Form;

运行结果:

Form 组件渲染成功

事件类型:React 为每种 DOM 事件都提供了类型,如 FormEvent、ChangeEvent、MouseEvent 等。

注意事项

  • React.FC:推荐使用,可获得完整的类型支持
  • Props 接口:为每个组件定义 Props 类型
  • useState 泛型:复杂类型需要显式指定
  • 事件类型:使用 React 提供的事件类型

最佳实践:将类型定义和组件放在同一文件,或集中管理在 types 目录。

总结

TypeScript 大幅提升了 React 开发体验。

  • React.FC:React 函数组件的标准类型
  • Props:使用 interface 定义组件属性
  • useState:使用泛型参数指定状态类型
  • useEffect:完整的类型支持
  • 事件:使用 React 事件类型避免 any

建议:新项目直接使用 TypeScript,可以显著减少运行时错误。

TypeScript 元组TypeScript 元组
上一篇
TypeScript 元组
TypeScript + Vue3 实战
下一篇
TypeScript + Vue3 实战
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • ljg-skills -
    ljg-skills
    ljg-skills 是李继刚开源的 AI 技能与提示词集合,面向大模型使用者整理了一批可复用的 prompt、角色设定和任务技能模板,适合用于学习提示词设计、搭建个人 AI 工作流和沉淀团队常用智能体能力。
    5043次使用
  • MELO音乐 - AI 音乐生成平台,支持多模态创作能力
    MELO音乐
    MELO音乐是一站式AI视频与音乐制作助手,对标suno, udio的高品质体验。提供伴奏生成、原创写词、无损导出、哼唱识曲、混音变声等全套音频与短视频编辑工具。无论是流行Kpop、电音说唱、民谣古风、摇滚儿歌还是商用轻音乐,MELO为你免费谱曲,轻松做同款!
    4575次使用
  • UniScribe - AI 免费在线音视频转文字平台
    UniScribe
    UniScribe 是一款 AI 音视频转文字与内容整理工具,支持上传音频、视频文件或粘贴 YouTube 链接,自动生成转写文本、摘要、思维导图和关键问题,并支持多格式导出,适合会议记录、课程学习、访谈整理和内容创作复盘。
    4529次使用
  • 剧云 - 免费 AI 智能中文剧本创作平台
    剧云
    剧云是专业中文剧本创作平台,安全稳定运行十余年,集成AI编剧、剧本医生审核、人物小传、剧情关系图、大纲编写、多人协作、Word导入导出、版权管控功能,数据安全防护,轻松高效创作剧本。
    4782次使用
  • 万象有声 - AI 一站式有声内容创作平台
    万象有声
    万象有声,一个专为有声创作者打造的新一代智能有声内容创作平台。平台提供专业的智能拆章、智能画本编辑、AI配音、AI生成音效、后期制作、智能对轨、智能审听等有声创作全流程工具,可以帮助创作者高效、低成本创作出引人入胜的有声作品。立即体验,让有声书制作更简单!
    4734次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码