这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
重点内容:🍊TypeScript🍊
🥝前言🥝
本节课我们初步了解了typescript以及它的基础语法规范,接下来就让我们回忆一下typescript吧!
🍑初识typescript🍑
TypeScript 是一种由微软开发的自由和开源的编程语言,它是 JavaScript 的一个超集,扩展了 JavaScript 的语法。
TypeScript和JavaScript一样,本身都是弱类型语言,不同之处在于JavaScript是动态类型语言,而Typescript是静态类型语言。动态类型,静态类型区别在于 “编译发生在程序执行前还是执行时”。
🍎语法基础🍎
基础数据类型
如图所示,左边是js代码,右边是ts代码。不难看出,相比较js,ts在声明变量时需要在变量名后加一个冒号":",在冒号":"后声明变量的类型。
tip:因为typescript是JavaScript的超集,所以左边的代码在typescript中也是可以运行的。
对象类型
在TS编写约定中,一般以一个大写的 I 开头来表示这是一个类型,用于和不同的对象或者类进行区分!所以在进行自定义类型定义的时候,用 I + 名称的方法定义。类型中的各种属性值设置方式就和基础数据类型的声明一样了。需要注意的是any表示所有类型都是被允许的,也就是说它可以是任意字符串、数字等格式。
函数类型
函数的定义同样遵循
**变量名 + “:” + 类型**的方式。这里推荐使用右侧的格式,因为下面的定义方法看起来会比较繁琐,如果函数多的话,容易搞混。
如上图,对于函数的重载,同样是使用interface I+名称的方式,在一个
{}中重载数据类型。
数组类型
数组类型的定义方法一共分为4种。
- 第一种方法直接定义整个数字类型,以一个方括号“[ ]”填充内容。
- 第二种方法是泛型表示,泛型就是不预先指定数据类型,在使用时根据情况再进行定义。
- 第三种方式直接写死了不同位置的不同类型,并不能很灵活,所以不常用。
- 第四种接口表示方法也不常用。
最常用的是第一种和第二种方法
一些补充
typescript中,空类型表示无赋值,任意类型any是所有类型的子类型,枚举类型支持枚举值到枚举名的正、反向映射!
🍓高级🍓
联合/交叉类型
联合类型: IA | IB ;联合类型表示一个值可以是几种类型之一
交叉类型: IA & IB ;多种类型叠加在一起成为一种新类型,它包含了所需的所有类型的特性
如上图,观察左边可以看出,不论是什么类型的图书,都存在作者这个属性,因此在右边,我们将作者作为共同部分和不公共的部分通过
&字符进行交叉,使其形成一种交叉类型。
类型守卫
很多情况下,不需要写特别多的类型守卫,当两个类型没有任何重合点的时候才需要写类型守卫。联合类型+类型保护的形式即可实现自动类型推断功能,就可以不用写类型守卫。
一些补充
索引类型: 关键字(keyof) 其相当于取值对象中的所有key组成的字符串字面量
type IKeys = keyof [ a: string; b: number }; // => type IKeys = "a""b
关键字in,其相当于取值 字符串字面量 中的一种可能,配合泛型P,即表示每个key。
关键字?,通过设定对象可选选项,即可自动推导出子集类型。
关键字entends跟随泛型出现时,表示类型推断。也即上文中提到的类型推断功能。
关键字infer出现在类型推荐中,表示定义类型变量,可以用于指代类型。
🍒总结🍒
TypeScript作为一种新接触的语言,第一天学习就接触了这么多知识,虽然和js类似,但想要掌握还需要不断地练习和理解!