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

请添加图片描述

【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有着相辅相成的作用

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习驱动下的自然语言处理进展及其应用前景

文章目录 每日一句正能量前言技术进步应用场景挑战与前景自然语言处理技术当前面临的挑战未来的发展趋势和前景 伦理和社会影响实践经验后记 每日一句正能量 一个人若想拥有聪明才智&#xff0c;便需要不断地学习积累。 前言 自然语言处理&#xff08;NLP&#xff09;是一项正…

LeetCode---382周赛---位运算

题目列表 3019. 按键变更的次数 3020. 子集中元素的最大数量 3021. Alice 和 Bob 玩鲜花游戏 3022. 给定操作次数内使剩余元素的或值最小 一、按键变更的次数 题目简单明了&#xff0c;就是看相邻的两个字母是否相等&#xff0c;不区分大小写&#xff0c;直接遍历统计即可…

Linux下tar命令详解

tar #归档命令 格式 • Tar -参数 [args]..... 参数&#xff1a; 必选参数&#xff1a; 辅助参数&#xff1a; 额外参数&#xff1a; # 打包时排除某个文件 tar cf 文件名.tar --exclude路径/文件 路径 注&#xff1a;此处的路径前后需要保持保持一致&#xff0c;统一…

【Langchain+Streamlit】打造一个旅游问答AI

利用LangchainStreamlit打造一个交互简单的旅游问答AI机器人&#xff0c;如果你有openai账号,可以按照如下的网址直接体验&#xff0c;如果你没有的话可以站内私信博主要一下临时key体验一下&#xff1a; 产品使用传送门—— http://101.33.225.241:8501/ 这里有演示效果和代码…

AIGC专题:2024年生成式人工智能预测报告(英文版)

今天分享的是AIGC系列深度研究报告&#xff1a;《AIGC专题&#xff1a;2024年生成式人工智能预测报告&#xff08;英文版&#xff09;》。 &#xff08;报告出品方&#xff1a;CBINSIGHTS&#xff09; 报告共计&#xff1a;112页 我们没有足够的高质量数据来训练LLM 研究人员…

计算机视觉中的目标跟踪

从保护我们城市的监控系统到自动驾驶车辆在道路上行驶&#xff0c;目标跟踪已经成为计算机视觉中的一项基础技术。本文深入探讨了目标跟踪&#xff0c;探索了其基本原理、多样化的方法以及在现实世界中的应用。 什么是目标跟踪&#xff1f; 目标跟踪是深度学习在计算机视觉中广…

刷存在感,Excel转Protobuf/Json通用配置文件

使用场景 最近工作流中有将Excel转Protobuf作为配置文件的技术方案。具体实现是先定一个proto文件&#xff0c;再在一个对应excel表中定义对应字段&#xff0c;由策划在excel进行更改。proto文件可以生成对应语言的脚本&#xff0c;然后将excel转成对应protobuf的binary。 我…

SQLMap的Tamper脚本

由于SQL注入的影响过于广泛以及人们的网络安全意识普遍提升&#xff0c;网站往往 会针对SQL注入添加防SQL注入系统或者WAF 。这时&#xff0c;在渗透测试过程中就需要 绕过网站的安全防护系统。SQLMap是一款用来检测与利用SQL注入漏洞的免费 开源工具&#xff0c;不仅可以实现S…

Matomo 访问图形显示异常

近期我们的把 PHP 系统完全升级后&#xff0c;访问 Matomo 的站点有关访问的曲线无法显示。 出现的情况如下图&#xff1a; 我们可以看到图片中有关的访问曲线无法显示。 如果具体直接访问链接的话&#xff0c;会有下面的错误信息。 问题和解决 出现上面问题的原因是缺少 ph…

JavaScript 基础 - 第4天

函数 理解函数的封装特性&#xff0c;掌握函数的语法规则 声明和调用 函数可以把具有相同或相似逻辑的代码“包裹”起来&#xff0c;通过函数调用执行这些被“包裹”的代码逻辑&#xff0c;这么做的优势是有利于精简代码方便复用。 声明&#xff08;定义&#xff09; 声明&a…

互联网加竞赛 基于深度学习的植物识别算法 - cnn opencv python

文章目录 0 前言1 课题背景2 具体实现3 数据收集和处理3 MobileNetV2网络4 损失函数softmax 交叉熵4.1 softmax函数4.2 交叉熵损失函数 5 优化器SGD6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习的植物识别算法 ** …

Qt 的安装以及项目的创建

目录 Qt简介Qt 开发环境安装的过程环境变量的配置Qt SDK 中的重要的工具创建一个 Qt 项目 Qt简介 开始安装教程前&#xff0c;首先来了解一下什么是QT。 QT&#xff08;Quick Thought&#xff09;是一个基于Qt库的快速应用程序开发框架。它提供了一套完整的开发工具和库&…

apipost 简单的性能压测总结

1、简单的使用机型牌评估 1&#xff09;jdk默认256M给100用&#xff0c;推荐给1000人同时用JVM 堆栈建议2G~4G&#xff08;目前定了机型4核8G内存 2T磁盘做radio0存储&#xff09;&#xff1b; 2&#xff09;数据库配置文件写了占了2G内存&#xff08;my.cnf文件&#xff09…

记录Git无法连接Github(443报错)的一种可能——代理问题

参考文章&#xff1a; Git安装配置与使用&#xff08;超级详细&#xff09;_git配置-CSDN博客 github代理报错_valueerror: unable to determine socks version from-CSDN博客 速通 如果在使用 git 时遇到了这样的报错&#xff1a; OpenSSL SSL_connect: SSL_ERROR_SYSCAL…

思科交换机调试流程介绍(主要适用于OEM的思科的浪潮FS6700)

文章目录 1、光纤交换机配置流程2、交换机初始化 2-1、 默认管理地址 2-2、 更改默认管理地址 2-3、 远程登录模式 2-4、 更改用户名 3、VSAN 3-1、什么是VSAN 3-2、关于 VSAN 的一些主意事项 3-3、配置VSAN 3-4、配置验证…

龙龙送外卖pta[代码+讲解]

题目 题解 代码 题目 龙龙是“饱了呀”外卖软件的注册骑手&#xff0c;负责送帕特小区的外卖。帕特小区的构造非常特别&#xff0c;都是双向道路且没有构成环 —— 你可以简单地认为小区的路构成了一棵树&#xff0c;根结点是外卖站&#xff0c;树上的结点就是要送餐的地址…

网工每日一练(2月4日)

试题1 通过HFC网络实现宽带接入&#xff0c;用户端需要的设备是&#xff08;A&#xff09;&#xff0c;局端用于控制和管理用户的设备是&#xff08;D&#xff09;。 &#xff08;1&#xff09;A.Cable Modem B.ADSL Modem C.OLT D.CMTS &#xff08;2&#xff09;A. Cable Mo…

Node.js的安装

目录 1 下载安装包 2 安装 3 以管理员身份打开命令提示符窗口 4 验证Node.js的环境变量 5 配置npm的全局安装路径 6 更换源 1 下载安装包 在浏览器中打开链接&#xff0c;即可看到如下页面&#xff0c;点击即可下载安装包 2 安装 除了下面这一步&#xff0c;其它无脑Nex…

docker安装nacos

nacos v2.3.0 docker run --name nacos -e MODEstandalone -p 8848:8848 -p 9848:9848 -d nacos/nacos-server:2.3.0访问&#xff1a;http://192.168.2.209:8848/nacos

24.云原生ArgoCD高级之钩子

云原生专栏大纲 文章目录 Argo CD钩子如何定义钩子钩子删除策略 Argo CD钩子 Argo CD 是一个用于部署和管理 Kubernetes 应用程序的工具&#xff0c;它提供了一种声明式的方式来定义和自动化应用程序的部署过程。Argo CD 钩子&#xff08;Hooks&#xff09;是一种机制&#x…