TypeScript导学:从零开始
引言
TypeScript的背景
TypeScript是一种由微软开发的开源编程语言,它是JavaScript的一个超集,添加了可选的静态类型和基于类的面向对象编程。自2012年首次发布以来,TypeScript因其能够提高代码的可读性、可维护性和可扩展性而迅速获得了广泛的认可。随着现代Web应用的复杂性日益增加,TypeScript提供了一种有效的方式来管理大型代码库,减少运行时错误,并提高开发效率。
TypeScript基础
TypeScript的安装和配置
- 安装Node.js和npm:TypeScript是通过npm(Node.js的包管理器)安装的,因此首先需要安装Node.js和npm。
- 安装TypeScript:通过npm安装TypeScript编译器,使用命令
npm install -g typescript
。 - 创建tsconfig.json:在项目根目录下创建一个
tsconfig.json
文件,用于配置TypeScript编译选项。
TypeScript的基本语法
- 变量声明:使用
let
和const
代替var
来声明变量,以支持块级作用域和常量。 - 基本类型:TypeScript支持JavaScript的所有基本类型,并添加了类型注解来指定变量的类型。
类型注解和类型推断
- 类型注解:通过在变量、函数参数和返回值后添加类型注解来明确指定类型,如
let num: number = 10;
。 - 类型推断:TypeScript编译器能够根据上下文推断变量的类型,减少显式类型注解的需求。
接口(Interfaces)
- 定义接口:接口是TypeScript中定义对象形状的一种方式,可以用来描述对象应该有哪些属性和方法。
- 实现接口:类可以通过
implements
关键字来实现一个接口,确保类的实例符合接口的形状。
类(Classes)
- 类的定义:TypeScript中的类可以包含属性、方法和构造函数。
- 访问修饰符:TypeScript支持
public
、private
和protected
等访问修饰符,用于控制类成员的可见性。 - 继承和多态:类可以继承其他类,并通过接口实现多态。
函数类型
- 函数类型注解:可以为函数的参数和返回值添加类型注解,确保函数的输入和输出符合预期。
- 可选参数和默认参数:TypeScript允许函数参数是可选的或有默认值。
枚举(Enums)
- 定义枚举:枚举是一种定义命名常量集合的方式,可以提高代码的可读性。
- 数字枚举和字符串枚举:TypeScript支持数字枚举和字符串枚举,以及它们的组合使用。
泛型(Generics)
- 泛型函数和类:泛型允许在定义函数和类时使用类型参数,使得代码更加灵活和可重用。
- 泛型约束:可以对泛型参数添加约束,限制它们必须是某种类型或其子类型。
TypeScript的编译选项和配置文件(tsconfig.json)
- tsconfig.json的作用:
tsconfig.json
文件用于配置TypeScript编译器的行为,包括编译选项和要编译的文件。 - 编译选项:可以配置如模块系统、目标JavaScript版本、是否启用严格类型检查等选项。
- 包含和排除文件:可以指定哪些文件被编译器处理,哪些文件被排除在外。
TypeScript进阶
高级类型系统
TypeScript的类型系统非常强大,它不仅支持基本的类型注解,还提供了许多高级类型特性,以支持更复杂的编程场景。
联合类型(Union Types)
- 定义:联合类型允许一个变量可以是多种类型之一。例如,
let value: string | number;
表示value
可以是string
类型或number
类型。 - 使用场景:当一个变量可以接受多种类型的数据时,使用联合类型可以提供类型安全。
交叉类型(Intersection Types)
- 定义:交叉类型允许将多个类型合并为一个类型,这个类型将拥有所有类型的特性。例如,
interface A { a: string; } interface B { b: number; } type C = A & B;
表示C
类型同时拥有A
和B
的属性。 - 使用场景:当需要组合多个接口的特性时,交叉类型非常有用。
条件类型(Conditional Types)
- 定义:条件类型允许基于某些条件来选择不同的类型。例如,
T extends U ? X : Y
表示如果T
是U
的子类型,则类型为X
,否则为Y
。 - 使用场景:条件类型在处理泛型时非常灵活,可以根据不同的条件来推断类型。
映射类型(Mapped Types)
- 定义:映射类型允许基于一个已有的类型创建一个新类型,新类型的属性可以通过某种方式转换。例如,
{ [P in K]: T }
表示创建一个新类型,其属性是从K
类型的属性名映射到T
类型。 - 使用场景:映射类型在处理对象类型时非常有用,可以用来创建具有相似结构但不同属性类型的类型。
装饰器(Decorators)
- 定义:装饰器是一种特殊类型的声明,它可以被附加到类声明、方法、访问符、属性或参数上。装饰器使用
@expression
这种形式,其中expression
必须求值为一个函数,它会在运行时被调用。 - 使用场景:装饰器提供了一种灵活的方式来修改、增强或替换类的行为。
TypeScript中的模块系统
- 模块定义:TypeScript支持基于文件的模块系统,每个文件可以是一个模块,通过
export
和import
关键字来导出和导入模块。 - 模块解析:TypeScript提供了多种模块解析策略,如经典、节点和路径映射等,以支持不同的模块组织方式。
TypeScript的类型声明文件(.d.ts)
- 定义:类型声明文件是一种特殊的文件,用于为JavaScript库提供TypeScript类型信息。这些文件通常以
.d.ts
结尾。 - 使用场景:当使用没有类型注解的JavaScript库时,可以通过
.d.ts
文件来提供类型信息,使得TypeScript能够理解库的API。
TypeScript工具和资源
TypeScript的官方文档和社区资源
- 官方文档:TypeScript的官方文档是学习和参考的最佳起点。它提供了详细的类型系统介绍、语言规范、API参考以及编译器选项说明。访问地址通常是 typescriptlang.org。
- 社区资源:TypeScript社区非常活跃,提供了大量的教程、博客文章、视频教程和论坛讨论。Stack Overflow、GitHub、以及TypeScript的官方论坛都是获取帮助和分享知识的好地方。
TypeScript的开发工具和编辑器支持
- Visual Studio Code:作为微软开发的轻量级代码编辑器,VS Code对TypeScript提供了极佳的支持,包括智能感知、代码导航、重构工具和内置的TypeScript编译器。
- 其他编辑器:除了VS Code,许多其他流行的代码编辑器和IDE(如WebStorm、Sublime Text、Atom等)也提供了对TypeScript的支持,包括语法高亮、代码补全和错误检查等功能。
TypeScript的学习资源和课程
- 在线教程和课程:互联网上有许多免费和付费的TypeScript教程和课程,适合不同水平的学习者。例如,Coursera、Udemy、Pluralsight等平台提供了由经验丰富的讲师讲授的TypeScript课程。
- 书籍:市面上也有许多关于TypeScript的书籍,从基础到高级,覆盖了TypeScript的各个方面。例如,《Programming TypeScript》和《TypeScript Deep Dive》等书籍都是学习TypeScript的好资源。
TypeScript的常见问题和解决方案
- 类型错误:在使用TypeScript时,可能会遇到类型错误。通常,TypeScript的错误信息非常详细,能够指出问题所在。如果遇到难以解决的问题,可以参考社区资源或在Stack Overflow等平台上提问。
- 类型定义文件:在使用第三方JavaScript库时,可能会遇到类型定义文件(.d.ts)缺失的问题。可以通过npm安装对应的类型定义包,或者自己创建类型定义文件。
- 编译配置:TypeScript的编译配置可能会比较复杂,特别是当项目规模变大时。可以参考官方文档或社区资源来学习如何配置tsconfig.json文件,以满足项目的特定需求。
相关文章:
TypeScript导学:从零开始
引言 TypeScript的背景 TypeScript是一种由微软开发的开源编程语言,它是JavaScript的一个超集,添加了可选的静态类型和基于类的面向对象编程。自2012年首次发布以来,TypeScript因其能够提高代码的可读性、可维护性和可扩展性而迅速获得了广…...
【BUG】已解决:IndexError: list index out of range
已解决:IndexError: list index out of range 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,武汉城市开发者社区主…...
AWS-S3实现Minio分片上传、断点续传、秒传、分片下载、暂停下载
文章目录 前言一、功能展示上传功能点下载功能点效果展示 二、思路流程上传流程下载流程 三、代码示例四、疑问 前言 Amazon Simple Storage Service(S3),简单存储服务,是一个公开的云存储服务。Web应用程序开发人员可以使用它存…...
Selenium - 设置元素等待及加载策略
7月18日资源分享: 耿直哥三部曲全——机器学习,强化学习,深度学习 链接: https://pan.baidu.com/s/1c_eVVeqCZmB6zszHt6ZXiw?pwdtf2a 在使用Selenium进行网页自动化测试时,一个常见的问题是页面加载速度和元素的可见性问题。…...
【数据结构】线性结构——数组、链表、栈和队列
目录 前言 一、数组(Array) 1.1优点 1.2缺点 1.3适用场景 二、链表(Linked List) 2.1优点 2.2缺点 2.3适用场景 三、栈(Stack) 3.1优点 3.2缺点 3.3适用场景 四、队列(Queue) 4.1优点…...
json将列表字典等转字符串,然后解析又转回来
在 Python 中使用 json 模块来方便地在数据和 JSON 格式字符串之间进行转换,以便进行数据的存储、传输或与其他支持 JSON 格式的系统进行交互。 JSON 字符串通过 json.loads() 函数转换为 Python 对象。 pthon对象通过json.dumps()转为字符串 import jsonstr_list…...
记录|.NET上位机开发和PLC通信的实现
本文记录源自:B站视频 实验结果:跟视频做下来是没有问题的。能运行。 自己补充做了视频中未实现的读取和写入数据部分【欢迎小伙伴指正不对的地方】 目录 前言一、项目Step1. 创建项目Step2. 创建动态图片展示Step3. 创建图片型按钮Step4. 创建下拉框Ste…...
微服务实战系列之玩转Docker(二)
前言 上一篇,博主对Docker的背景、理念和实现路径进行了简单的阐述。作为云原生技术的核心之一,轻量级的容器Docker,受到业界追捧。因为它抛弃了笨重的OS,也不带Data,可以说,能够留下来的都是打仗的“精锐…...
Linux:信号的概念与产生
信号概念 信号是进程之间事件异步通知的一种方式 在Linux命令行中,我们可以通过ctrl c来终止一个前台运行的进程,其实这就是一个发送信号的行为。我们按下ctrl c是在shell进程中,而被终止的进程,是在前台运行的另外一个进程。因…...
云监控(华为) | 实训学习day2(10)
spring boot基于框架的实现 简单应用 - 用户数据显示 开发步骤 第一步:文件-----》新建---项目 第二步:弹出的对话框中,左侧选择maven,右侧不选任何内容. 第三步,选择maven后,下一步 第4步 :出现对话框中填写项目名称 第5步&…...
数据结构第35节 性能优化 算法的选择
算法的选择对于优化程序性能至关重要。不同的算法在时间复杂度、空间复杂度以及适用场景上有着明显的差异。下面我将结合具体的代码示例,来讲解几种常见的算法选择及其优化方法。 示例 1: 排序算法 场景描述: 假设我们需要对一个整数数组进行排序。 算法选择: …...
每天一个数据分析题(四百三十六)- 正态分布
X为服从正态分布的随机变量N(2, 9), 如果P(X>c)P(X<c), 则c的值为() A. 3 B. 2 C. 9 D. 2/3 数据分析认证考试介绍:点击进入 题目来源于CDA模拟题库 点击此处获取答案 数据分析专项练习题库 内容涵盖Python,SQL&…...
跟我学C++中级篇——虚函数的性能
一、虚函数性能 一般来说,面向对象的设计中,继承和多态是其中两个非常重要的特征。从使用的过程来看,一般应用到继承的,使用多态的可能性就非常大。而多态的实现有很多种, 但开发者通常认为的多态(动多态&…...
trl - 微调、对齐大模型的全栈工具
文章目录 一、关于 TRL亮点 二、安装1、Python包2、从源码安装3、存储库 三、命令行界面(CLI)四、如何使用1、SFTTrainer2、RewardTrainer3、PPOTrainer4、DPOTrainer 五、其它开发 & 贡献参考文献最近策略优化 PPO直接偏好优化 DPO 一、关于 TRL T…...
GuLi商城-商品服务-API-品牌管理-品牌分类关联与级联更新
先配置mybatis分页: 品牌管理增加模糊查询: 品牌管理关联分类: 一个品牌可以有多个分类 一个分类也可以有多个品牌 多对多的关系,用中间表 涉及的类: 方法都比较简单,就不贴代码了...
【linux】服务器ubuntu安装cuda11.0、cuDNN教程,简单易懂,包教包会
【linux】服务器ubuntu安装cuda11.0、cuDNN教程,简单易懂,包教包会 【创作不易,求点赞关注收藏】 文章目录 【linux】服务器ubuntu安装cuda11.0、cuDNN教程,简单易懂,包教包会一、版本情况介绍二、安装cuda1、到官网…...
在 Apifox 中如何高效批量添加接口请求 Body 参数?
在使用 Apifox 进行 API 设计时,你可能会遇到需要添加大量请求参数的情况。想象一下,如果一个接口需要几十甚至上百个参数,若要在接口的「修改文档」里一个个手动添加这些参数,那未免也太麻烦了,耗时且易出错。这时候&…...
专业PDF编辑工具:Acrobat Pro DC 2024.002.20933绿色版,提升你的工作效率!
软件介绍 Adobe Acrobat Pro DC 2024绿色便携版是一款功能强大的PDF编辑和转换软件,由Adobe公司推出。它是Acrobat XI系列的后续产品,提供了全新的用户界面和增强功能。用户可以借助这款软件将纸质文件转换为可编辑的电子文件,便于传输、签署…...
车载音视频App框架设计
简介 统一播放器提供媒体播放一致性的交互和视觉体验,减少各个媒体应用和场景独自开发的重复工作量,实现媒体播放链路的一致性,减少碎片化的Bug。本文面向应用开发者介绍如何快速接入媒体播放器。 主要功能: 新设计的统一播放U…...
StarRocks on AWS Graviton3,实现 50% 以上性价比提升
在数据时代,企业拥有前所未有的大量数据资产,但如何从海量数据中发掘价值成为挑战。数据分析凭借强大的分析能力,可从不同维度挖掘数据中蕴含的见解和规律,为企业战略决策提供依据。数据分析在营销、风险管控、产品优化等领域发挥…...
VUE中setup()
在Vue中,setup() 函数是Vue 3.0及更高版本引入的一个重要特性,它是Composition API的入口点。setup() 函数用于初始化组件的状态和逻辑,包括定义响应式数据、方法和生命周期钩子。以下是关于setup() 函数的详细解释: 1. 作用与特…...
【单元测试】SpringBoot
【单元测试】SpringBoot 1. 为什么单元测试很重要?‼️ 从前,有一个名叫小明的程序员,他非常聪明,但有一个致命的缺点:懒惰。小明的代码写得又快又好,但他总觉得单元测试是一件麻烦事,觉得代码…...
分布式搜索引擎ES-elasticsearch入门
1.分布式搜索引擎:luceneVS Solr VS Elasticsearch 什么是分布式搜索引擎 搜索引擎:数据源:数据库或者爬虫资源 分布式存储与搜索:多个节点组成的服务,提高扩展性(扩展成集群) 使用搜索引擎为搜索提供服务。可以从海量…...
TCP三次握手与四次挥手详解
1.什么是TCP TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的通信协议,属于互联网协议族(TCP/IP)的一部分。TCP 提供可靠的、顺序的、无差错的数据传输服务&…...
【Windows】操作系统之任务管理器(第一篇)
一、操作系统简介 Windows操作系统是由微软公司(Microsoft)开发的一款图形操作系统,它以其强大的功能和广泛的用户基础,成为了目前世界上用户使用最多、兼容性最强的操作系统之一。以下是关于Windows操作系统的详细介绍ÿ…...
图同构的必要条件
来源:离散数学...
Django获取request请求中的参数
支持 post put json_str request.body # 属性获取最原始的请求体数据 json_dict json.loads(json_str)# 将原始数据转成字典格式 json_dict.get("key", "默认值") # 获取数据参考 https://blog.csdn.net/user_san/article/details/109654028...
kotlin compose 实现应用内多语言切换(不重新打开App)
1. 示例图 2.具体实现 如何实现上述示例,且不需要重新打开App ①自定义 MainApplication 实现 Application ,定义两个变量: class MainApplication : Application() { object GlobalDpData { var language: String = "" var defaultLanguage: Strin…...
记录些MySQL题集(16)
MySQL 存储过程与触发器 一、初识MySQL的存储过程 Stored Procedure存储过程是数据库系统中一个十分重要的功能,使用存储过程可以大幅度缩短大SQL的响应时间,同时也可以提高数据库编程的灵活性。 存储过程是一组为了完成特定功能的SQL语句集合&#x…...
【算法基础】Dijkstra 算法
定义: g [ i ] [ j ] g[i][j] g[i][j] 表示 v i v_i vi 到 $v_j $的边权重,如果没有连接,则 g [ i ] [ j ] ∞ g[i][j] \infty g[i][j]∞ d i s [ i ] dis[i] dis[i] 表示 v k v_k vk 到节点 v i v_i vi 的最短长度, …...
wordpress页面链接跳转/产品推广方式及推广计划
Hash Table基础 哈希表(Hash Table)是常用的数据结构,其运用哈希函数(hash function)实现映射,内部使用开放定址、拉链法等方式解决哈希冲突,使得读写时间复杂度平均为O(1)。 HashMap(std::unordered_map)、HashSet(std::unordered_set)的原理…...
东营网站推广/怎样做网络推广挣钱
在使用Windows系统的电脑时,有时候C盘的根目录下会莫名出现一个msdia80.dll文件,很多人感觉很变扭但又不敢轻易删除,当然这不能随意删除,其实msdia80.dll文件是在安装了 Microsoft Visual C 2005 可再发行组件时被错误安装在其他驱…...
做动态网站难么/广告竞价排名
一、电脑主板架构1.概念:主板是连接各组件的重要部分。主板上连接各部分组件的芯片组,其设计优劣,会影响电脑的性能2.芯片组①早期芯片组:早期的芯片组通常分为两个网桥来控制各组件的通信北桥:负责连接速度较快的CPU、…...
英语营销型网站建设/哪里有免费的网站推广服务
最近在研究Lanucher ,看了源码,发现了SlidingDrawer 这个类,也就是所谓的"抽屉"类。它的用法很简单,要包括handle ,和content .handle 就是当你点击它的时候,content 要么抽抽屉要么关抽屉。别的不多说了,具…...
onethink wordpress/个人网页怎么做
多用一个库,多一个坑,用一个库就要用足它的红利,可能的情况下尽量采纳同一个库。前面采用来restbed 来实现websocket 和http server ,今天需要写一个influxdb 的C客户端。有一次选用restbed 来作为 http客户端。网上建议比较多的是…...
做网站租服务器吗/电脑培训班一般多少钱
特别补充一句:软件可以一次性复制多个文件的文件名。 Windows 中的复制文件名实在是有些不方便 ,需要点右键 "重命名"之后再点右键选择"复制"才可复制文件名。我以前用过一个软件,叫:"复制文件名CopyFil…...