【Vue3实战】TypeScript前端实战基础

news2024/12/25 14:48:59

请添加图片描述

【Vue3实战】TypeScript前端实战基础

  • 前言
  • 一、TypeScript的由来
  • 二、什么是TypeScript?
  • 三、静态类型检查
  • 四、类型注解和类型推导
  • 五、可选参数和默认参数
  • 六、接口和类型别名
    • 接口
    • 接口的可选设置
    • 类型
  • 七、类和继承
    • 接口的继承
    • 交叉类型模拟继承
  • 八、泛型
    • 什么是泛型
    • 泛型接口
    • 泛型函数
    • 泛型约束
  • 九、枚举
  • 十、快速安装
  • 结语

前言

经过多年的全栈开发经验和多种编程语言的开发经验,编程语言的规范的重要性与日俱增

对未来的前端编程而言,TypeScript的比重相信一定会日新月异

所以这边对于TypeScript做一篇比较详细和完整的整理

日后也会逐渐更新和补充。

TypeScript目前版本:5.3

TypeScript官方网站传送门

如果您对前端技术感兴趣的话,可以订阅鄙人的Vue栏目

Vue栏目传送门


一、TypeScript的由来

2010 – 微软团队开始开发
2012 – 第一个公开版本发布(TypeScript 0.8)
2013 – TypeScript 0.9 发布,支持泛型了
2014 – TypeScript 1.0 发布,Visual Studio 2013 默认支持 TypeScript 了。同时,源码从CodePlex 迁移到 Github
2017 – TypeScript 2.1 发布
2018 – TypeScript 3.2 发布

TypeScript 最初是个微软内部项目,叫 Strada,致力于提升大型 JS 项目(当时内部需求是 Bing Maps、 Office Web Apps 甚至 Windows 8 apps)的可靠性和可维护性。2010 年开始开发,2012 年 10 月发布了第一个开源版本,持续迭代至今。

如果想要了解更多关于TypeScript更详尽的历史,可以访问下面传送门。

【TypeScript的前世今生的传送门】

二、什么是TypeScript?

TypeScript是微软开发的一个开源的编程语言,通过在JavaScript的基础上添加静态类型定义构建而成。

2012年10月,微软发布了首个公开版本的TypeScript。

2013年6月19日,在经历了一个预览版之后微软正式发布了正式版TypeScript。

当前最新正式版本为TypeScript 5.3, 2024年1月发布。

TypeScript 是具有类型语法的 JavaScript,是一门强类型的编程语言。

在这里插入图片描述


三、静态类型检查

TypeScript 强调变量类型的声明,可以提前发现类型错误,减少运行时的错误。使用类型注解可以明确标识变量的类型,编译器会在编译时进行类型检查。

  let count:number = 100
  // 上面声明时强调了count为number类型,但下面又把count赋值为string类型
  // 所以下面这行在TypeScript静态类型检查会报红,在JavaScript中是显示正常的
  count = '1'

当声明了一个变量为某个数据类型时,再把此变量赋其他数据类型的值

在编译中,静态类型检查会使其报红

但是在运行后,代码还是能如期运行的,也不会报错

这边不建议使用TypeScript语法时,忽略静态类型检查进行编程

这样用TypeScript语法的意义就没有了

编程语言的规范及其重要,这是重中之重!


四、类型注解和类型推导

可以使用类型注解显式声明变量、函数的类型。同时,TypeScript 也会根据上下文进行类型推导,可以根据赋值表达式或者函数返回值自动推断出变量的类型。

  // 类型注解
  let hey:string = 'tony'
  // 类型推导
  let hi = 9527

这边给hey加上了:string注解,强调hey是string类型的变量

变量hi没有强调任何变量,直接赋值了number值9527,该变量hi自动推导为number类型


五、可选参数和默认参数

在函数声明时,可以通过使用 ? 来定义可选参数,还可以在函数参数中给定默认值来定义默认参数。

const test = (a: string, b?: number, c: boolean = false) => {
  console.log(a)
  console.log(b)
  console.log(c)
}

test('hey')
// 输出 hey, undefined, false
test('hi', 123)
// 输出 hi, 123, false
test('how', 123, true)
// 输出 how, 123, true

?定义了b为可选参数,这个参数可输入可不输入,不输入时 b = undefined

在定义参数时输入值,如 c:boolean = false,这样参数 c 的默认值就为 false,如果不输入参数,c = false


六、接口和类型别名

可以使用接口(interface)和类型别名(type)来定义自定义类型。接口用于定义对象的结构和属性,类型别名用于为类型定义别名,提高代码可读性。

接口

// 声明一个Person接口
interface Person {
  name: string,
  age: number
}

// 创建一个类型为接口Person的对象p
const p: Person = {
  name: 'Tony',
  age: 18
}

接口的可选设置

interface Person {
  name: string,
  age?: number // 可选参数
}

类型

// 声明一个Person类型
type Person = {
  name: string,
  age?: number
}

const p: Person = {
  name: 'Tony',
}

七、类和继承

TypeScript 支持类和继承,可以使用关键字 class 来定义类,并且可以使用 extends 关键字继承一个类。

接口的继承

一般不继承写接口代码如下:

// 原价商品类型
interface GoodsType {
  id: string,
  price: number
}

// 打折商品类型
interface DisGoodsType {
  id: string,
  price: number,
  disPrice: number
}

接口的很多属性是可以进行类型复用的,使用 extends 实现接口继承,实现类型复用

以下代码使用继承实现类型复用,代码如下:

// 原价商品类型
interface GoodsType {
  id: string,
  price: number
}

// 打折商品类型
interface DisGoodsType extends GoodsType{
  disPrice: number
}

交叉类型模拟继承

type A = {
  propA: string
}

type B = {
  propB: number
}

type C = A & B

const obj: C = {
  propA: 'hey',
  propB: 9527
}

类型别名配合交叉类型(& 与)可以模拟继承,同样可以实现类型复用


八、泛型

TypeScript 提供了泛型(Generics)的支持,可以在类和函数中使用泛型来增加代码的灵活性和重用性。

什么是泛型

泛型(Generics)是指在定义接口、函数等类型的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性, 使用泛型可以复用类型并且让类型更加灵活。

泛型接口

在接口类型的名称后面使用 < T > 即可声明一个泛型参数,接口里的其他成员都能使用该参数的类型。

interface Goods {
  id: number,
  goodName: string
}

interface User {
  name: string,
  age: number
}

// 定义泛型
interface ResData<T> {
  code: number,
  msg: string,
  data: T
}

// 定义泛型参数为User
let userData: ResData<User> = {
  code: 200,
  msg: 'success',
  data: {
    name: 'Tony',
    age: 18
  }
}

// 定义泛型参数为Goods
let goodsData: ResData<Goods> = {
  code: 200,
  msg: 'success',
  data: {
    id: 1,
    goodName: 'iPhone'
  }
}

找到可变的类型部分通过泛型抽象为泛型参数(定义参数)

在使用泛型的时候,把具体类型传入到泛型参数位置 (传参)

泛型函数

在函数名称的后面使用 < T > 即可声明一个泛型参数,整个函数中(参数、返回值、函数体)的变量都可以使用该参数的类型

const createArray = <T>(len: number, value: T): T[] => {
  let result = []
  for (let i = 0; i < len; i++) {
    result[i] = value
  }
  return result
}


createArray<string>(4, '100') // ['100','100','100','100']
createArray<number>(4, 100) // [100,100,100,100]

泛型约束

泛型的特点就是灵活不确定,有些时候泛型函数的内部需要访问一些特定类型的数据才有的属性,此时会有类型错误,需要通过泛型约束解决。

// 定义接口
interface lengthObj {
  // 带有长度字段的接口
  length: number
}

// 泛型约束
function logLen<T extends lengthObj>(obj: T) {
  console.log(obj.length)
}


// 泛型约束(ES6箭头函数写法)
const logLen = <T extends lengthObj>(obj: T) => {
  console.log(obj.length)
}

九、枚举

枚举(Enum)是一种方便的数据类型,它用于定义一组具有相同类型的常量,并可以给这些常量命名,方便代码中对它们的引用。

代码示例:

enum EnumName {
  value1 = 1,
  value2 = 2,
  value3 = 3
}

// 打印结果
console.log(`EnumName.value1: ${EnumName.value1}`)
console.log(`EnumName.value2: ${EnumName.value2}`)
console.log(`EnumName.value3: ${EnumName.value3}`)

浏览器控制台打印结果如下:

在这里插入图片描述

其中,EnumName 为枚举类型的名称,value1、value2、value3 等为枚举常量的名称,1、2、3 等为枚举常量的值。不指定值时,默认从 0 开始自增。

代码示例:

enum Color {
  Red,
  Green,
  Blue
}

// 打印结果
console.log(`Color.Red: ${Color.Red}`)
console.log(`Color.Green: ${Color.Green}`)
console.log(`Color.Blue: ${Color.Blue}`)

打印结果:

在这里插入图片描述


十、快速安装

在Node.js环境下

在控制台输入:

npm install -g typescript

在package.json文件中

会新增一个依赖项如下:

  "devDependencies": {
    "typescript": "^5.3.3"
  }

结语

Mozilla创造了JavaScript,Microsoft创建了TypeScript,Huawei进一步推出了ArkTS

由于我们中国主力研发团队Huawei的支持,在鸿蒙生态中使用ArkTS作为客户端开发语言

对于学习TypeScript这门语言对于ArkTS有着相辅相成的作用

个人还是比较支持我们国产研发团队推出的语言产品架构

毕竟,我们中国的繁荣富强,才能保证整个社会的安定

在这里插入图片描述
位卑未敢忘忧国,事定犹须待阖棺。

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

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

相关文章

使用MATLAB驱动USRP-N320实现OFDM自收自发

文章目录 前言一、收发代码二、截取一帧 OFDM三、执行主函数四、运行结果五、资源自取 前言 本文作为实验结果记录及测试&#xff0c;方便后面回顾所做的工作。本文基于一台电脑和一台 USRP 设备实现了 OFDM 自发和自收功能 一、收发代码 ofdm_tx_rx_test.m 核心代码&#x…

使用 IDEA 开发一个简单易用的 SDK

目录 一、什么是 SDK 二、为什么要开发 SDK 三、开发 SDK 的详细步骤 四、导入 SDK 进行测试 附&#xff1a;ConfigurationProperties 注解的介绍及使用 一、什么是 SDK 1. 定义&#xff1a;软件开发工具包 Software Development Kit 2. 用于开发特定软件或应用程序的工…

大数据应用开发3-Scala笔记1

一、编程框架 Scala语言是在JVM上运行的&#xff0c;兼容Java语法 区分大小写 - Scala是大小写敏感的&#xff0c;这意味着标识Hello 和 hello在Scala中会有不同的含义。 类名 - 对于所有的类名的第一个字母要大写。 如果需要使用几个单词来构成一个类的名称&#xff0c;每个…

单片机学习笔记---定时器/计数器(简述版!)

目录 定时器的介绍 定时计数器的定时原理 定时计数器的内部结构 两种控制寄存器 &#xff08;1&#xff09;工作方式寄存器TMOD &#xff08;2&#xff09;控制寄存器TCON 定时计数器的工作方式 方式0 方式1 方式2 方式3 定时器的配置步骤 第一步&#xff0c;对…

嵌入式软件中常见的 8 种数据结构

数据结构是一种特殊的组织和存储数据的方式&#xff0c;可以使我们可以更高效地对存储的数据执行操作。数据结构在计算机科学和软件工程领域具有广泛而多样的用途。 几乎所有已开发的程序或软件系统都使用数据结构。此外&#xff0c;数据结构属于计算机科学和软件工程的基础。当…

el-table点击某一行选中改变背景色且执行方法

elementUI table表格点击某一行选中并且改变背景色 使用:row-style"rowStyle"及row-click“selectRow”&#xff1a; 其中 selectRow 方法中&#xff1a; row 输出&#xff1a;当前行的内容 column 输出&#xff1a;当前列的信息 event 输出&#xff1a;当前事件 …

四、Redis之配置文件

redis配置文件的名称 redis.conf 通过命令 find / -name redis.confvim redis.conf通过 : set nu 设置行号: set nonu 取消行号/关键字 搜索关键字: set noh 取消高亮选择4.1 Units 配置大小单位&#xff0c;开头定义了一些基本的度量单位&#xff0c;只支持 bytes&#…

springBoot静态资源文件夹以及文件夹之间的优先级

1、springBoot静态资源文件夹&#xff0c;系统默认路径&#xff0c;优先级由大到小 classpath:/META-INF/resources/ classpath:/resources/ classpath:/static/ classpath:/public/ 比如当static文件夹中和public文件夹中都存在a.html 浏览器访问localhost:8080/a.html将访问…

JS高级(二)-深入对象、内置构造函数、综合案例

文章目录 1.深入对象1.1创建对象的三种方式1.2构造函数1.3实例成员1.4静态成员 2.内置构造函数2.1 Object2.2 Array2.3显示赠品案例2.4包装类型2.4.1 String2.4.2 Number 3.综合案例——购物车展示 1.深入对象 了解面向对象的基础概念&#xff0c;能够利用构造函数创建对象。 1…

【TCP】四次挥手(终止连接)

前言 TCP&#xff08;传输控制协议&#xff09;是互联网协议&#xff08;IP&#xff09;中的一种重要传输层协议&#xff0c;用于在通信的计算机之间建立可靠的、有序的和错误校验的数据传输。在TCP连接中&#xff0c;数据传输是双向的&#xff0c;因此需要一种机制来开始和结…

2024美赛数学建模A题思路分析 - 资源可用性和性别比例(2)

# 1 赛题 问题A&#xff1a;资源可用性和性别比例 虽然一些动物物种存在于通常的雄性或雌性性别之外&#xff0c;但大多数物种实质上是雄性或雌性。虽然许多物种在出生时的性别比例为1&#xff1a;1&#xff0c;但其他物种的性别比例并不均匀。这被称为适应性性别比例的变化。…

基于SSM的健身房会员管理系统(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的健身房会员管理系统(有报告)。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring SpringMvc Mybatis J…

网络原理TCP/IP(1)

文章目录 端口号UDP协议 在网络通信中&#xff0c;协议非常重要 协议进行了分层 应用层就是对应着应用程序&#xff0c;是程序员打交道最多的这一层&#xff0c;调用系统提供的网络api写出来的代码都是属于应用层的 应用层有很多现成的协议&#xff0c;但是更多的还是程序员需要…

【Spark系列6】如何做SQL查询优化和执行计划分析

Apache Spark SQL 使用 Catalyst 优化器来生成逻辑执行计划和物理执行计划。逻辑执行计划描述了逻辑上如何执行查询&#xff0c;而物理执行计划则是 Spark 实际执行的步骤。 一、查询优化 示例 1&#xff1a;过滤提前 未优化的查询 val salesData spark.read.parquet(&quo…

STM32GPIO输入(按键控制LED、光敏电阻控制蜂鸣器实例)

文章目录 一、介绍传感器模块介绍硬件电路c语言数据类型 二、实例按键控制LED接线图代码实现 光敏电阻控制蜂鸣器组装线路代码实现 相关函数解释 一、介绍 传感器模块介绍 硬件电路 上两种按下时为0&#xff0c;下两种按下时为1。 c语言数据类型 现在常用stdint头文件所定…

【Java程序设计】【C00187】基于SSM的旅游资源网站管理系统(论文+PPT)

基于SSM的旅游资源网站管理系统&#xff08;论文PPT&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的旅游资源网站 本系统分为前台系统、用户和管理员3个功能模块。 前台系统&#xff1a;当游客打开系统的网址后&#xff0c;首先看到的就是…

一文掌握单基因GSEA富集分析 | gseaGO and gseaKEGG

本期教程 本期教程原文&#xff1a;一文掌握单基因GSEA富集分析 | gseaGO and gseaKEGG 写在前面 关于GSEA分析&#xff0c;我们在前期的教程单基因GSEA富集分析 | 20220404有出过类似的分享。今天&#xff0c;我们也结合相关的资源整理出一篇关于GSEA的教程及出图教程。每个…

mysql 锁知识汇总

目录 一、锁1.1 什么是锁&#xff1f;1.2 全局锁1.2.1 定义1.2.2 应用场景1.2.3 会出现的问题1.2.4 解决方法 1.3 表级锁1.3.1 表锁1.3.2 元数据锁&#xff08;MDL&#xff09;1.3.3 意向锁1.3.4 AUTO-INC锁 1.4 行级锁1.4.1 记录锁(Record Lock)1.4.2 间隙锁(Gap Lock)1.4.3 N…

字符下标计数

下标计数 数组计数&#xff0c;即通过使用一个新的数组&#xff0c;对原来数组里面的项进行计数&#xff0c;统计原来数组中各项出现的次数&#xff0c;如下图所示&#xff1a; 数组计数可以方便快速地统计出一个各项都比较小的数组中&#xff0c;数值相同的数的个数。 数组计数…

PHP集成开发 -- PhpStorm 2023

PhpStorm 2023是一款强大的PHP集成开发环境&#xff08;IDE&#xff09;&#xff0c;旨在提高开发人员的生产力和代码质量。以下是关于PhpStorm 2023软件的详细介绍&#xff1a; 首先&#xff0c;PhpStorm 2023提供了丰富的代码编辑功能&#xff0c;包括语法高亮、自动补全、代…