TypeScript基础 | 青训营笔记

79 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天

重点内容:🍊TypeScript🍊

🥝前言🥝

本节课我们初步了解了typescript以及它的基础语法规范,接下来就让我们回忆一下typescript吧!

🍑初识typescript🍑

TypeScript 是一种由微软开发的自由和开源的编程语言,它是 JavaScript 的一个超集,扩展了 JavaScript 的语法。
TypeScript和JavaScript一样,本身都是弱类型语言,不同之处在于JavaScript是动态类型语言,而Typescript是静态类型语言。动态类型,静态类型区别在于 “编译发生在程序执行前还是执行时”。

🍎语法基础🍎

基础数据类型

image.png 如图所示,左边是js代码,右边是ts代码。不难看出,相比较js,ts在声明变量时需要在变量名后加一个冒号":",在冒号":"后声明变量的类型
tip:因为typescript是JavaScript的超集,所以左边的代码在typescript中也是可以运行的。

对象类型

image.png
在TS编写约定中,一般以一个大写的 I 开头来表示这是一个类型,用于和不同的对象或者类进行区分!所以在进行自定义类型定义的时候,用 I + 名称的方法定义。类型中的各种属性值设置方式就和基础数据类型的声明一样了。需要注意的是any表示所有类型都是被允许的,也就是说它可以是任意字符串、数字等格式。

函数类型

image.png 函数的定义同样遵循**变量名 + “:” + 类型**的方式。这里推荐使用右侧的格式,因为下面的定义方法看起来会比较繁琐,如果函数多的话,容易搞混。

image.png 如上图,对于函数的重载,同样是使用interface I+名称的方式,在一个{}中重载数据类型。

数组类型

image.png 数组类型的定义方法一共分为4种。

  1. 第一种方法直接定义整个数字类型,以一个方括号“[ ]”填充内容。
  2. 第二种方法是泛型表示,泛型就是不预先指定数据类型,在使用时根据情况再进行定义。
  3. 第三种方式直接写死了不同位置的不同类型,并不能很灵活,所以不常用。
  4. 第四种接口表示方法也不常用。
    最常用的是第一种和第二种方法

一些补充

typescript中,空类型表示无赋值,任意类型any是所有类型的子类型,枚举类型支持枚举值到枚举名的正、反向映射

🍓高级🍓

联合/交叉类型

联合类型: IA | IB ;联合类型表示一个值可以是几种类型之一
交叉类型: IA & IB ;多种类型叠加在一起成为一种新类型,它包含了所需的所有类型的特性

image.png 如上图,观察左边可以看出,不论是什么类型的图书,都存在作者这个属性,因此在右边,我们将作者作为共同部分和不公共的部分通过&字符进行交叉,使其形成一种交叉类型。

类型守卫

image.png 很多情况下,不需要写特别多的类型守卫,当两个类型没有任何重合点的时候才需要写类型守卫。联合类型+类型保护的形式即可实现自动类型推断功能,就可以不用写类型守卫。

一些补充

索引类型: 关键字(keyof) 其相当于取值对象中的所有key组成的字符串字面量

type IKeys = keyof [ a: string; b: number }; // => type IKeys = "a""b

关键字in,其相当于取值 字符串字面量 中的一种可能,配合泛型P,即表示每个key。
关键字?,通过设定对象可选选项,即可自动推导出子集类型。
关键字entends跟随泛型出现时,表示类型推断。也即上文中提到的类型推断功能。
关键字infer出现在类型推荐中,表示定义类型变量,可以用于指代类型。

🍒总结🍒

TypeScript作为一种新接触的语言,第一天学习就接触了这么多知识,虽然和js类似,但想要掌握还需要不断地练习和理解!