TypeScript学习笔记(上):TypeScript的介绍、安装及常用类型

我对TypeScript的理解就是,TypeScript是增加了类型校验的JavaScript,能够把运行期错误提升至编译期

TypeScript是什么?

TypeScript(简称:TS)是 JavaScript 的超集(JS 有的 TS 都有)。

TypeScript = Type + JavaScript(在 JS 基础之上,为 JS 添加了类型支持)。

TypeScript 是微软开发的开源编程语言,可以在任何运行 JavaScript 的地方运行。

说明:所有合法的 JS 代码都是 TS 代码,有 JS 基础只需要学习 TS 的类型即可。

安装编译 TS 的工具包

问题:为什么要安装编译 TS 的工具包?

回答:运行环境Node.js或浏览器,只认识 JS 代码,不认识 TS 代码。需要先将 TS 代码转化为 JS 代码,然后才能运行。

安装命令:npm i -g typescript。 typescript 包:用来编译 TS 代码的包,提供了 tsc 命令,实现了 TS -> JS 的转化。

验证是否安装成功:tsc -v(查看 typescript 的版本)

运行 TS 的步骤

运行方式:使用 ts-node 包,直接在 Node.js 中执行 TS 代码。

安装命令:npm i -g ts-node(ts-node 包提供了 ts-node 命令)。

使用方式:ts-node hello.ts。

解释:ts-node 命令在内部“偷偷的”将 TS -> JS,然后,再运行 JS 代码。

TypeScript 常用类型

可以将 TS 中的常用基础类型细分为两类:JS 已有类型和TS 新增类型

JS 已有类型

原始类型:number、string、boolean、null、undefined、symbol

对象类型:object(包括,数组、对象、函数等对象)

TS 新增类型

联合类型、自定义类型(类型别名)、接口、元组、字面量类型、枚举、void、any 等

简单数据类型

完全按照 JS 中类型的名称来书写即可

数组类型

两种写法,推荐使用第一种

联合类型

由两个或多个其他类型组成的类型,表示可以是这些类型中的任意一种

用 | 把可能的类型分隔开(注意不是 || )

 有括号和没有括号的区别

let arr: (number | string)[]  //一个数组,数组元素可以是数值型或字符串型
let arr: number | string[]  //一个数字或一个字符串数组

类型别名

类型别名(自定义类型):为任意类型起别名

使用场景:当同一类型(复杂)被多次使用时,可以通过类型别名,简化该类型的使用

函数类型

法一

法二

法二只适用于函数表达式

没有返回值的函数

如果函数没有返回值,那么,函数返回值类型为:void

有可选参数的函数

可选参数:在函数中,某个或多个参数可以传也可以不传

在可传可不传的参数后面加上?

注意:可选参数只能出现在参数列表的最后

对象类型 

解释:

1. 直接使用 {} 来描述对象结构。属性采用 属性名: 类型 的形式;方法采用 方法名(): 返回值类型 的形式。

2. 如果方法有参数,就在方法名后面的小括号中指定参数类型(比如:greet(name: string): void)。

3. 在一行代码中指定对象的多个属性类型时,使用 ;(分号)来分隔。

4. 如果一行代码只指定一个属性类型(通过换行来分隔多个属性类型),可以去掉 ;(分号)。

5. 方法的类型也可以使用箭头函数形式(比如:{ sayHi: () => void }) 

接口

当一个对象类型被多次使用时,一般会使用接口(interface)来描述对象的类型,达到复用的目的

解释:

1. 使用 interface 关键字来声明接口。

2. 接口名称(比如,此处的 IPerson),可以是任意合法的变量名称。

3. 声明接口后,直接使用接口名称作为变量的类型。

4. 因为每一行只有一个属性类型,因此,属性类型后没有 ;(分号)

interface(接口)和 type(类型别名)的对比

相同点:都可以给对象指定类型。

不同点:接口,只能为对象指定类型。

类型别名,不仅可以为对象指定类型,实际上可以为任意类型指定别名

通过继承实现接口中公共的属性or方法的复用

解释: 1. 使用 extends(继承)关键字实现了接口 Point3D 继承 Point2D。 2. 继承后,Point3D 就有了 Point2D 的所有属性和方法(此时,Point3D 同时有 x、y、z 三个属性)。

元组

元组类型和数组很像,元组类型是另一种类型的数组,它确切地知道包含多少个元素,以及特定索引对应的类型

使用 number[] 的缺点:不严谨,因为该类型的数组中可以出现任意多个数字。

更好的方式:元组(Tuple)

该示例中,元素有两个元素,每个元素的类型都是 number

类型推论

在 TS 中,某些没有明确指出类型的地方,TS 的类型推论机制会帮助提供类型。

换句话说:由于类型推论的存在,这些地方,类型注解可以省略不写!

发生类型推论的 2 种常见场景:1、在声明变量的同时完成初始化时  2、决定函数返回值时。

推荐:能省略类型注解的地方就省略(偷懒,充分利用TS类型推论的能力,提升开发效率)。

技巧:如果不知道类型,可以通过鼠标放在变量名称上,利用 VSCode 的提示来查看类型。例如不知道js中某个内置函数的返回值类型, 直接将鼠标移到函数名上,就会自动显示函数返回值

字面量类型

通过 TS 类型推论机制,可以得到答案:

1. 变量 str1 的类型为:string。

2. 变量 str2 的类型为:'Hello TS'。

解释:

1. str1 是一个变量(let),它的值可以是任意字符串,所以类型为:string。

2. str2 是一个常量(const),它的值不能变化只能是 'Hello TS',所以,它的类型为:'Hello TS'

注意:此处的 'Hello TS',就是一个字面量类型。也就是说某个特定的字符串也可以作为 TS 中的类型。 除字符串外,任意的 JS 字面量(比如,对象、数字等)都可以作为类型使用

字面量类型配合联合类型一起使用:用来表示一组明确的可选值列表

比如,在贪吃蛇游戏中,游戏的方向的可选值只能是上、下、左、右中的任意一个

枚举

枚举的功能类似于字面量类型+联合类型组合的功能,也可以表示一组明确的可选值。

枚举:定义一组命名常量。它描述一个值,该值可以是这些命名常量中的一个 

解释:

1. 使用 enum 关键字定义枚举。

2. 约定枚举名称、枚举中的值以大写字母开头。

3. 枚举中的多个值之间通过 ,(逗号)分隔。

4. 定义好枚举后,直接使用枚举名称作为类型注解

解释:通过将鼠标移入 Direction.Up,可以看到枚举成员 Up 的值为 0。

注意:枚举成员是有值的,默认为:从 0 开始自增的数值。

我们把,枚举成员的值为数字的枚举,称为:数字枚举。

当然,也可以给枚举中的成员初始化值

字符串枚举:枚举成员的值是字符串。

注意:字符串枚举没有自增长行为,因此,字符串枚举的每个成员必须有初始值

any类型

原则:不推荐使用 any!这会让 TypeScript 变为 “AnyScript”(失去 TS 类型保护的优势)。 因为当值的类型为 any 时,可以对该值进行任意操作,并且不会有代码提示

解释:以上操作都不会有任何类型错误提示,即使可能存在错误!

尽可能的避免使用 any 类型,除非临时使用 any 来“避免”书写很长、很复杂的类型!

其他隐式具有 any 类型的情况:1、声明变量不提供类型也不提供默认值  2、函数参数不加类型。

注意:因为不推荐使用 any,所以,这两种情况下都应该提供类型

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

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

相关文章

【LeetCode】升级打怪之路 Day 15:二叉树解题的思维模式 —— 遍历、分解问题

今日题目: 226. 翻转二叉树101. 对称二叉树114. 二叉树展开为链表 目录 LC 226. 翻转二叉树 【easy】LC 101. 对称二叉树 ⭐⭐⭐LC 114. 二叉树展开为链表 ⭐⭐⭐ 今天的题目主要是对二叉树递归遍历的应用,东哥带你刷二叉树(思路篇&#xff0…

谈谈伦敦金操作策略中如何加码

在伦敦金操作策略中应该涉及加码的问题,什么叫加码呢?加码是指一笔伦敦金交易盈利以后,在市场中再注入资金进行加仓。在有利于自己的情况下,我们仓位越重,累积的盈利越多。而且这是在已经盈利的基础上加码,…

Java 学习和实践笔记(28):equals方法的使用

equals() 是Object类里的一个方法。而Object类是所有类的父类,所有的Java对象都拥有Object类的属性和方法。一切类,如果在类的声明中未使用extends,则默认继承Object类。如果声明了,那么Object类就变成该类的父类的父类的...类&am…

python+django高校澡堂洗浴浴室预约签到管理系统8d8c

本系统在设计过程中,高校洗浴管理系统的出现就有很大的需求。该系统可以很好地解决这些麻烦和问题。 很好地发挥了该开发方式的优势,让实现代码有了良好的可读性,而且使代码的更新和维护更加的方便,操作简单,对以后的维…

带你详细理解数组与指针(包含二维数组)

作者博客主页:谦逊码农的旅程 1. sizeof中单独放一个数组名,此时的数组名表示整个数组。 2. &数组名,表示整个数组的地址。 3. 在 C 语言中,变量的地址通常是由一个指针来表示,而指针的大小取决于计算机架构和操…

MySQL·SQL优化

目录 一 . 前言 二 . 优化方法 1 . 索引 (1)数据构造 (2)单索引 (3)explain (4)组合索引 (5)索引总结 2 . 避免使用select * 3 . 用union all代替u…

Linux之cd、pwd、mkdir 命令

cd命令,切换目录 1)当Linux终端(命令行)打开的时候,会默认以用户的HOME目录作为当前的工作目录。 2)我们可以通过cd命令,更改当前所在的工作目录。 3)cd命令来自英文:C…

使用nvidia-ml-py事实监控GPU状态

平时监控GPU状态最常用的是watch配合nvidia-smi指令,但有时可能不仅仅需要监控,还需要记录状态数据,比如GPU的显存变化以及利用率变化等等。本文提供了一个使用nvidia-ml-py包编写的简易Demo,该Demo能够实现简易版的nvidia-smi功能…

C++之获取Windows系统信息

目录 1. 操作系统版本 2. 获取CPU信息 3. 获取内存信息 4. 获取硬盘信息 5.获取网络接口信息 6.获取计算机名称、用户名 在C中,你可以使用Windows API函数来获取Windows系统的各种信息。以下是一些常见的API函数和示例代码,用于获取Windows系统信息…

STM32使用标准库编写外部时钟控制oled显示计数(proteus仿真)

这节课的结果是在上节课的基础上更改的:电路图为:用一个开关来模拟外部时钟的高低电平的变化。 当然也可以配置一个外部时钟来模拟,也是可以的: 由于这节课的代码是在上节课的基础上有一点修改而来的,所以就只把更改的…

【python高级编程教程】笔记(python教程、python进阶)第三节:(1)多态与鸭子类型(Polymorphism and Duck Typing)

参考文章1:【比刷剧还爽】清华大佬耗时128小时讲完的Python高级教程!全套200集!学不会退出IT界! 参考文章2:清华教授大力打造的Python高级核心技术!整整100集,强烈建议学习(Python3…

C++_程序流程结构_跳转语句_break

break 作用 用于跳出选择结构或循环结构 break使用的时机 出现在switch条件语句中,作用是终止case并跳出switch出现在循环语句中,作用是跳出当前的循环语句出现在嵌套循环中,跳出最近的内层循环语句 示例1 示例2 示例3

C语言结构体的大小,结构体内存对齐

1. 结构体的大小 在自己正真了解过之前&#xff0c;一直认为结构体的大小就是结构体内部成员大小的总和。 但当你去尝试打印结构体的大小时&#xff0c;会发现事实并非如此&#xff0c;也不会像你想的那样简单。 #include <stdio.h>struct S1 {char c1;char c2;int i;…

什么原因导致了电视大国的国内市场萎缩1300台?2024最值得购买的随身WiFi

近日&#xff0c;全国人大代表&#xff0c;TCL的创始人兼董事长就提出了一个问题&#xff1a;中国生产了世界上75%的电视机&#xff0c;但是国内市场的销量&#xff0c;在5年内缩水了1300万台&#xff0c;这究竟是为什么呢&#xff1f; 对此网友们纷纷解答&#xff1a; 电视能…

Android开发者值得深入思考的几个问题,看完必懂

程序员的劫 最近&#xff0c;又被程序员年龄的事情刷屏了。37岁被公司优化&#xff0c;找工作几个月都没有很好的归属&#xff0c;所谓的小公司还看不上。等等类似的话题变成了程序员的吐槽固定标题&#xff0c;无论是程序员&#xff0c;还是其他行业人员&#xff0c;都可以就…

Stable Diffusion V3测评

1.引言 3月5号&#xff0c;Stability AI发布了介绍Stable Diffusion V3的研究论文&#xff0c;链接地址&#xff1a;戳我 这是目前他们发布的最先进、功能最强大的图像生成器&#xff0c;与一年多前发布的令人印象深刻的 Stable Diffusion V2.1 相比有了大幅升级。SD3所带来的…

LINUX重定向的原理

1.利用文件描述符规则实现重定向 文件描述的分配规则:最小没有使用的下标会分给最新打开的文件 正常printf打印是在stdin标准输出显示器打印&#xff0c;stdin标准输出显示器的fd是1。 所以只要把显示器文件stdin给关闭&#xff0c;再打开一个文件&#xff0c;这个文件的 fd…

HTML静态网页成品作业(HTML+CSS)——新年春节介绍网页设计制作(3个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示1、首页2、子页13、子页2 三、代码目录四、网站代码HTML部分代码CSS部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0…

【InternLM 笔记】使用InternStudio 体验书生·浦语2-chat-1.8b随记

书生浦语2-chat-1.8b 介绍 书生浦语-1.8B (InternLM2-1.8B) 是第二代浦语模型系列的18亿参数版本。为了方便用户使用和研究&#xff0c;书生浦语-1.8B (InternLM2-1.8B) 共有三个版本的开源模型&#xff0c;他们分别是&#xff1a; InternLM2-1.8B: 具有高质量和高适应灵活性…

双指针算法(2)

611.有效三角形的个数 一、题目描述 OJ题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09; 二、思路讲解 首先我们能想到的一定是暴力枚举&#xff0c;它的时间复杂度是(O^3)。 我们可以固定一个最长边&#xff0c;然后在比这条边小的有序数组中找出一个二元组&…