【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 & Bconst 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.hqwc.cn/news/448892.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言指针的几种用途

先看题目&#xff0c;写一个fun函数&#xff0c;统计一个字符串中某个字符出现的次数&#xff0c;以及这个字符第一次出现的位置。 看起来很简单&#xff0c;似乎几行就可以搞定&#xff0c;但是写出来之后&#xff0c;才发现代码怎么这么长&#xff01;程序里多处使用了指针&…

ClickHouse基于数据分析常用函数

文章标题 一、WITH语法-定义变量1.1 定义变量1.2 调用函数1.3 子查询 二、GROUP BY子句&#xff08;结合WITH ROLLUP、CUBE、TOTALS&#xff09;三、FORM语法3.1表函数3.1.1 file3.1.2 numbers3.1.3 mysql3.1.4 hdfs 四、ARRAY JOIN语法&#xff08;区别于arrayJoin(arr)函数&a…

当前的脑机交互更像是自动化交互,而不是智能化交互

脑机交互是指通过直接连接人类大脑与外部设备&#xff0c;实现人与计算机、机器或其他设备之间的交互。目前的脑机交互技术还存在许多挑战和限制&#xff0c;因此可以说脑机交互还远远不成熟。当前的脑机交互更像是自动化交互&#xff0c;而不是智能化交互。 目前的脑机交互技术…

前端开发者应该知道的TypeScript可区分联合

作为一个前端开发者&#xff0c;你的工作不仅仅是移动像素&#xff0c;前端的大部分复杂性来自于处理你的应用程序可能处于的所有不同状态。 它可能是加载数据&#xff0c;等待表单被填写&#xff0c;或者发送一个遥测事件 - 或者同时进行这三项。 如果不能正确处理状态&…

C#,哥伦布数(Golomb Number)的算法与源代码

1 哥伦布数&#xff08;Golomb Number&#xff09; 哥伦布数&#xff08;Golomb Number&#xff09;是一个自然数的非减量序列&#xff0c;使得n在序列中正好出现G&#xff08;n&#xff09;次。前几个15的G&#xff08;n&#xff09;值为&#xff1a;1 2 2 3 3 4 4 4 5 5 5 6…

Leetcode2855. 使数组成为递增数组的最少右移次数

Every day a Leetcode 题目来源&#xff1a;2855. 使数组成为递增数组的最少右移次数 解法1&#xff1a;暴力 由于右移 n 次就变回原数组了&#xff0c;所以答案至多为 n−1。 枚举右移次数&#xff08;1~n-1&#xff09;&#xff0c;每次右移一个元素后判断数组是否有序&…

MATLAB实现随机森林(RF)回归与自变量影响程度分析

本文分为两部分&#xff0c;首先是对代码进行分段、详细讲解&#xff0c;方便大家理解&#xff1b;随后是完整代码&#xff0c;方便大家自行尝试。另外&#xff0c;关于基于MATLAB的神经网络&#xff08;ANN&#xff09;代码与详细解释&#xff0c;我们将在后期博客中介绍。 1…

算法练习-二叉树的节点个数【完全/普通二叉树】(思路+流程图+代码)

难度参考 难度&#xff1a;中等 分类&#xff1a;二叉树 难度与分类由我所参与的培训课程提供&#xff0c;但需要注意的是&#xff0c;难度与分类仅供参考。且所在课程未提供测试平台&#xff0c;故实现代码主要为自行测试的那种&#xff0c;以下内容均为个人笔记&#xff0c;旨…

2024年美赛B题潜水器定位和搜救建模代码和完整论文文档

目前已完成2024年美赛B题潜水器定位和搜救的建模代码和论文编写&#xff0c;部分文章内容和代码如下&#xff1a; 摘要 在海洋探险和搜救领域&#xff0c;潜水器的定位和搜救任务具有重要意义。本文旨在开发一系列模型来预测潜水器位置、分析不确定性、确定信息传递策略、建议…

[UI5 常用控件] 05.FlexBox, VBox,HBox,HorizontalLayout,VerticalLayout

文章目录 前言1. FlexBox布局控件1.1 alignItems 对齐模式1.2 justifyContent 对齐模式1.3 Direction1.4 Sort1.5 Render Type1.6 嵌套使用1.7 组件等高显示 2. HBox,VBox3. HorizontalLayout&#xff0c;VerticalLayout 前言 本章节记录常用控件FlexBox,VBox,HBox,Horizontal…

说说RDB和AOF

简介&#xff1a; 众所周知&#xff0c;redis是一个内存数据库&#xff0c;当机器重启后&#xff0c;内存中数据都会丢失。所以redis提供了两种持久化方式&#xff0c;即&#xff1a;RDB(保存一个时间点前的数据)和AOF(保存redis服务器端执行的每一条命令)。 RDB: RDB有两种…

Web实战丨基于django+hitcount的网页计数器

文章目录 写在前面Django简介主要程序运行结果系列文章写在后面 写在前面 本期内容 基于djangohitcount的网页计数器 所需环境 pythonpycharm或vscodedjango 下载地址 https://download.csdn.net/download/m0_68111267/88795611 Django简介 Django 是一个开源的、基于 …