嘎嘎学习之TypeScript | 青训营笔记

123 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第八天

1. 什么是TypeScript

1.1 发展历史

image-20220810151409533

1.2 什么是TypeScript

image-20220810151543890

动态类型:在执行阶段会执行类型的匹配/检验

静态类型:会提前检验,使用时得先编译,比如python和java

弱类型语言:执行的时候会执行隐式类型转换

与JS的区别

image-20220810151832924

2. TypeScript基本语法

2.1 基础数据类型

image-20220810152402103

2.2 对象类型

image-20220810152510081

约定 :在TypeScript中,会在前面带一个大写的 I 用来表示这是一个类型,用于和普通的对象或者类区分

any

any是JavaScript中特有的一个数据类型,顾名思义,代表所有,任何

2.3 函数类型

image-20220810153542023

在实际开发中这样写可能会非常的复杂,可读性也会变得非常的差,所以可以沿用interface的方法

image-20220810160622384

区别就是要对参数返回值定义类型,如果是箭头函数,返回值类型前也要加一个箭头

函数重载

image-20220810162100649

也可以使用interface简写,但是会出现一些问题

image-20220810162532150

2.4 数组类型

数组其实就是一个扩展的对象

image-20220810162601465

泛型里的record其实就是一个对象类型的简化写法

在一般情况,第一种和第二种用的比较多。

2.5 TypeScript补充数据类型

image-20220810163242523

2.6 TypeScript泛型

image-20220810164142001

这里的 T 实际上就是泛型

image-20220810170400523

泛型的高级语法

image-20220810204334949

2.7 类型别名&类型断言

类型别名

可以进行复用

image-20220810204556247

类型断言

image-20220810204826572

2.8 字符串/数字 字面量

就是限定了取值的意思?

image-20220810204921966

3. 高级类型

3.1 联合/交叉 类型

一个小case,在为书籍列表编写类型的时候,类型声明会很繁琐存在较多的重复

image-20220810205403537

可以对上面的类型声明代码进行联合/交叉类型的改进

image-20220810205605428

3.2 类型保护与类型守卫

以下代码在js中可以运行,但是在ts中会报错

image-20220810214911586

类型守卫

image-20220810215203206

类型保护

image-20220810215448120

应用到之前的书籍case

image-20220810215638057

3.3 case

传统实现,会有污染

image-20220810221336619

以下方式穗儿没有污染但也有一定的问题

image-20220810221411096

可以借用泛型来实现

image-20220810221435529

3.4 case+

image-20220810221504331

最佳实现

image-20220810221519255

4. TypeScript的工程应用

webpack

babel