【Typescript学习】使用 React 和 TypeScript 构建web应用(一)预览成品、初始化react项目、常见类型

news2024/11/28 16:29:05

教程来自freecodeCamp:【英字】使用 React 和 TypeScript 构建应用程序
跟做,仅记录用
其他资料:https://www.freecodecamp.org/chinese/news/learn-typescript-beginners-guide/


第一天

1 学习目标(我个人的)

  • 入门 TypeScript
  • 回顾 React
  • 学习如何听懂咖喱味英语

以下是视频前18分钟的内容,比较基础。

2 JavaScript vs TypeScript

TypeScript包含了JavaScript,是JavaScript的安全扩增,适用于大项目和产品级别的app,并且比JavaScript更严谨,能避免很多错误。目前很多app都是TypeScript编写的。TypeScript 代码会编译成 JavaScript 代码运行。

官网手册介绍
https://www.typescriptlang.org/zh/docs/handbook/typescript-in-5-minutes.html

3 看看我们的目标成品

一个Web应用——TASKIFY,就是一个Todo List(待办列表)
在这里插入图片描述
功能:

  • 分为Active Tasks和Completed Tasks两栏
  • 新建、编辑、删除、完成todo
  • 在两栏间拖拽 todo

4 初始化使用 TypeScript 的 React 项目

学会搜索,关键词【react typescript】
在这里插入图片描述
可以在cmd中使用

npx create-react-app typescript-tutorial --template typescript

可能需要几分钟,完成后用vscode打开typescript-tutorial文件夹,在TERMINAL输入

npm start

看到启动成功,打开模板主页
在这里插入图片描述
回到vscode,删掉一些我们不需要的文件,App.css内容清空
在这里插入图片描述
在引用这些文件的文件里删掉依赖项,将App.tsx文件改为

import React from 'react';
import './App.css';

function App() {
  return (
    <div className="App">
      Hello world!
    </div>
  );
}

export default App;

ok,看到熟悉的helloword了
在这里插入图片描述

5 TypeScript基本数据类型

TypeScript建议显式定义变量的类型,语法:

// let {变量名}: {类型} [= 初始化值];
let name: string;

鼠标悬停在变量名上,会看到变量的类型
如果在之后给变量赋的值不是声明的类型,就会报错
其他的数据类型包括number, boolean, array, tuple, object

let name: string = 'gugujiang';
let age: number;
let isStudent: boolean;
let hobbies: string[];
let role: [number, string]; // tuple
role = [5, 'edad'];

6 TypeScript 对象定义

方法一

let person: Object;

但是不建议,因为这样无法指定person对象里的属性

方法二

先定义一个type(其中包括对象需要的属性的key和类型),再用这个type作为person对象的类型

type Person = {
  name: string;
  age: number;
};
let person: Person = {
	name: 'gugujiang',
	age: 2
};

如果想要type中的某些属性是非必须的,可以在冒号前的位置加上?

type Person = {
  name: string;
  age?: number;  // age属性是optional了
};

如果想定义以元素为Person类型的数组

let lotsOfPeople: Person[];

7 TypeScript的Union类型

需求:如果我想要某个变量可以是两种数据类型,比如说age既可以是number,又可以是string,那么此时就应当使用union类型,类似于自定义的类型组合。

let age: number | string;  // 可以继续往后接|... 

age = 5;
age = 'five'; 

8 function类型

方法一:

let pringName: Function;

方法二:

定义时把形参和返回值类型都定义好,=>后声明的是返回值类型

let printName: (name: string) => void;
//  效果相当于
function printName(name: string): void {
}

如果参数不必须,也可以再冒号前加?

9 any、never类型

如果想和js中一样,变量的类型随着赋值不同而不同,可以定义为any类型,当想对某个变量不使用类型检查时,也可以用any类型

let name = any;

替代方法是可以为unknown

let name = unknown;

函数的返回值:
不返回也可以用never
nevervoid的区别:never什么都不返回,void返回undefined

强烈建议阅读 TypeScript官方的文档,数据类型介绍更具体https://www.typescriptlang.org/zh/docs/handbook/2/basic-types.html

10 类型别名(type 和 interface)

常常会想多次使用同一个类型,并通过同一个名称引用它
类型别名可以用多种类型自定义,例如联合类型、另一个类型别名

type

type X = {
	a: string;
	b: number;
}
type Y = X & {
	c: string;
	d: number;
}  // Y包含属性a,b,c,d

interface

interface Person {
  name: string;
  age?: number;
};

interface Guy extends Person {
  profession: string;
}

type 和 interface的区别

大多数情况下可自由选择,几乎所有的interface功能都可以在type中使用。

interfacetype
扩展方面(创建另一个别名,其中使用已有的别名)可以扩展的,用extends扩展可以,用 &扩展
添加新字段方面(修改已有别名)可以的,直接再写一次interface X {a:string}就向X添加了a属性不可以,type创建后就不能再修改了

第一天done!

心得体会:
刷文字版教程虽然快,但是我容易遗忘。因为即使我的眼睛熟悉了,大脑熟悉了,也不代表我的手熟悉了。
跟着项目的视频敲一遍可以更好地记住知识点

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

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

相关文章

开启前端CSS学习之路-css001

&#x1f60a;博主页面&#xff1a;鱿年年 &#x1f449;博主推荐专栏&#xff1a;《WEB前端》&#x1f448; ​&#x1f493;博主格言&#xff1a;追风赶月莫停留&#xff0c;平芜尽处是春山❤️ 目录 前言 一、CSS简介 1.HTML的局限性 2.CSS-网页美容师 3.CSS语法规范…

ccflow 代码

java 工作流的开发框架目录概述需求&#xff1a;设计思路实现思路分析1.工作流参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,challenge S…

十大常见排序算法(java编写)

日升时奋斗&#xff0c;日落时自省 目录 1、插入排序 2、希尔排序 3、选择排序 4、堆排序 5、冒泡排序 6、快速排序 6.1、Hoare法找基准值 6.2、挖坑法找基准值 6.3、快慢指针找中间值 6.4、优化 6.5、非递归排序 7、归并排序 7.1、递归实现 7.2、非递归实现 7.…

车载通信协议-列车实时数据协议(TRDP)

TCNOPEN是一个铁路行业相关的合作伙伴创建的开源的倡议&#xff0c;其目的是建立一些新的或即将出台的铁路标准的关键部分&#xff0c;通常以TCN命名。TCN&#xff08;列车通信网络&#xff09;是IEC&#xff08;国际电工委员会&#xff09;第43工作组制定的一系列国际标准&…

C++学习/温习:新型源码学编程(一)

写在前面 本文约15页&#xff0c;如觉得文章过长请通过左侧边栏或知识点概览目录浏览食用面向初学者撰写专栏&#xff0c;个人原创的学习C/C笔记&#xff08;干货&#xff09;编程练习所作源代码输出内容为中文&#xff0c;便于理解如有错误之处请各位读者指正请读者评论回复、…

Go语言基础突破(一)——基础语法快速上手

文章目录一、本次学习重点内容&#xff1a;二、详细知识点介绍&#xff1a;1、什么是Go语言特点&#xff1a;2、为什么字节跳动全面使用go语言:3、开发环境——安装Golang&#xff1a;4、推荐编辑器&#xff1a;VScode、Goland5、基础语法1、HolleWorld2、基础语法——变量声明…

Ubuntu 玩机笔记

键盘Fn无法切换功能键与多媒体键 终端输入&#xff1a; echo 2 | sudo tee /sys/module/hid_apple/parameters/fnmode然后再长按 FnXL 约四秒即可成功使用Fn切换功能键与多媒体键。 永久生效 以上方法只是输入命令后生效&#xff0c;想要永久生效&#xff0c;可以进行如下操…

深度学习-吴恩达(C5)训练词向量

2.1 词汇表征 上周我们学习了RNN、GRU单元和LSTM单元。本周你会看到我们如何把这些知识用到NLP上&#xff0c;用于自然语言处理&#xff0c;深度学习已经给这一领域带来了革命性的变革。其中一个很关键的概念就是词嵌入&#xff08;word embeddings&#xff09;&#xff0c;这…

手机提供GMS支持(适用安卓和鸿蒙系统)

手机提供GMS支持 - 适用安卓和鸿蒙系统前言方式1&#xff1a;安装GMS套件&#xff08;不推荐&#xff09;方式2&#xff1a;安装OurPlay&#xff08;推荐&#xff09;方式3&#xff1a;安装Gspace&#xff08;推荐&#xff09;前言 本文提供多种为手机&#xff08;安卓和鸿蒙系…

数据库系统概论①——数据库系统基本概念

文章目录1、数据库的相关术语1.1 数据(Data)1.2 数据库(Database,简称DB)1.2.1 数据库的定义&#xff1a;数据库是长期储存在计算机内、有组织的、可共享的数据集合。1.2.2 数据库的特征1.3 数据库管理系统&#xff08;DBMS&#xff09;1.3.1 DBMS的主要功能1.4 数据库系统&…

自己动手写一个操作系统——MBR(4)_调试_elf_bin

文章目录前言elf 文件指定代码入口地址添加调试信息代码检验调试小结前言 通过 GDB 我们可以跟踪程序的执行&#xff0c; 并且能够看到寄存器的状态&#xff0c; 但是&#xff0c;上面这种调试方式&#xff0c;没有和代码对应起来&#xff0c;以致于我们无法直观地知道 CP…

CodeSYS之一EtherNET驱动禾川电机

硬件:HCFA Q0-1100系列CPU X3EB 驱动器, SV-X2MHO40A伺服电机,24V开关电源。 硬件连接: 电机三相线和编码器线接X3EB驱动器,24V电源接X3EB驱动器,驱动器IN网口接 CPUPort2,CPU接24V电源,Port1 接电脑。 这部分有问题可以直接进禾川官网 一、驱动器调试 接好先后,按驱动…

边缘检测、Padding、stride、三维卷积

目录1.边缘检测(edge detection)当我们做物体识别的时候&#xff0c;一般神经网络的前几层会进行边缘检测&#xff0c;然后检测到物体的一部分&#xff0c;最后检测到整个物体。边缘检测例子&#xff1a;垂直边缘检测器&#xff1a;中间的一个3x3的矩阵&#xff0c;我们称之为过…

力扣sql简单篇练习(六)

力扣sql简单篇练习(六) 1 变更性别 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # set子句中也是可以使用if函数的 UPDATE Salary SET sexif(sexf,m,f)1.3 运行截图 2 销售员 2.1 题目内容 2.1.1 基本题目信息1 2.1.2 基本题目信息2 2.1.3 示例…

代码随想录--二叉树章节总结 Part I

代码随想录–二叉树章节总结 Part I 1.Leetcode144 前序遍历二叉树 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历 解题思路1&#xff1a;使用递归解决。 public List<Integer> preorderTraversal(TreeNode root) {ArrayList<Integer> list …

c中对宏的理解(面试题)

1、gcc的编译过程&#xff1a;预处理、编译、汇编、链接 预处理&#xff1a;宏替换、删除注释、头文件包含、条件编译 -E &#xff08;不会发生报错&#xff09;生成预编译文件 将 01_code.c文件使用 gcc -E 01_code.c -o 01.i生成预编译文件01.i 可以10行的源文件看见生成800…

【c语言进阶】枚举与联合体的基本知识大全

&#x1f680;write in front&#x1f680; &#x1f4dc;所属专栏&#xff1a;c语言学习 &#x1f6f0;️博客主页&#xff1a;睿睿的博客主页 &#x1f6f0;️代码仓库&#xff1a;&#x1f389;VS2022_C语言仓库 &#x1f3a1;您的点赞、关注、收藏、评论&#xff0c;是对我…

1600_Cmake学习笔记_Cmake实践学习

全部学习汇总&#xff1a; GreyZhang/g_cmake: my learning notes for cmake tool. (github.com) 之前考虑过是否要学习Cmake&#xff0c;经过各种对比之后放弃了&#xff0c;我选择了去学习scons。在实际的工作以及学习中scons也的确给了我很大的受益。当时出于各种方面的原因…

PyQt5开发环境搭建 1.1 软件安装

写在前面的话&#xff08;1&#xff09;相对而言&#xff0c;python&#xff0c;PyQt5安装还是比较快的。Qt这个又大又慢。Eric也是需要比较长的时间。&#xff08;2&#xff09;安装失败很正常&#xff0c;多尝试几次&#xff0c;多查查&#xff0c;努力装好软件。安装和配置是…

【Linux】VM与Linux的安装

1.1 VMWare安装 1&#xff09;VMware Workstation Pro安装向导 2&#xff09;VMware Workstation安装的许可协议。 3&#xff09;VMware Workstation安装路径。 4&#xff09;VMware Workstation增强型键盘功能。 5&#xff09;VMware Workstation软件检查更新和帮助完善 6&am…