深入浅出TypeScript
为什么要学习TypeScript?
TypeScript VS JavaScript
JavaScript 只是一个脚本语言,并非设计用于开发大型 Web 应用,JavaScript 没有提供类和模块的概念,而 TypeScript 扩展了 JavaScript 实现了这些特性。
- TypeScript
JavaScript 的超集,用于解决大型 项目的代码复杂性
强类型,支持静态和动态类型
可以在编译期间发现并纠正错误
不允许改变变量的数据类型 - JavaScript
一种脚本语言,用于创建动态网页
动态弱类型语言
只能在运行时发现错误
变量可以被赋值成不同类型
TypeScript带来了什么
类型安全
下一代JS特性
完善的工具链
TypeScript基础
TS基础-基础类型
- boolean 、 number 、 string
- undefined 、 null
- any 、 unknown 、 void
- never
- 数组类型 []
- 元组类型 tuple
TS基础-函数类型
定义: TS 定义函数类型时要定义输入参数类型和输出类型
输入参数: 参数支持可选参数和默认参数
输出参数: 输出可以自动推断,没有返回值时,默认为 void 类型
函数重载
名称相同但参数不同,可以通过重载支持多种类型
TS基础-interface
定义:接口是为了定义对象类型
- 特点: 可选属性: ?
- 只读属性: readonly
- 可以描述函数类型 - 可以描述自定义属性
总结:接口非常灵活 duck typing
TS基础-类
定义:写法和 JS 差不多,增加了一些定义
特点:
- 增加了 public 、 private 、 protected 修饰符
- 抽象类:
- 只能被继承,不能被实例化
- 作为基类,抽象方法必须被子类实现
- interface 约束类,使用 implements 关键字
面向对象的三大特性:封装、继承、多态
封装(Encapsulation):将对数据的操作细节隐藏起来,只暴露对外的接口。外界调用端不需要(也不可能)知道细节,就能通过对外提供的接口来访问该对象,同时也保证了外界无法任意更改对象内部的数据
继承(Inheritance):子类继承父类,子类除了拥有父类的所有特性外,还有一些更具体的特性
多态(Polymorphism):由继承而产生了相关的不同的类,对同一个方法可以有不同的响应。
TypeScript进阶
TS进阶-高级类型
- 联合类型 |
- 交叉类型 &
- 类型断言
- 类型别名( type VS interface )
- 定义:给类型起个别名
- 相同点:
1.都可以定义对象或函数
2. 都允许继承 - 差异点:
1. interface 是 TS 用来定义对象, type 是用来定义别名方便使用;
2. type 可以定义基本类型, interface 不行;
3. interface 可以合并重复声明, type 不行;
TS进阶-泛型-什么时候需要泛型
官方定义: 软件工程中,我们不仅要创建一致的定义良好的 API ,同时也要考虑可重用性。 组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型, 这在创建大型系统时为你提供了十分灵活的功能。
在像 C# 和 Java 这样的语言中,可以使用泛型来创建可重用的组件, 一个组件可以支持多种类型的数据。 这样用户就可以以自己的数据类型来使用组件。
TS进阶-泛型-基本使用
基本定义:
- 泛型的语法是 <> 里面写类型参数,一般用 T 表示;
- 使用时有两种方法指定类型:
1. 定义要使用的类型
2. 通过 TS 类型推断,自动推导类型 - 泛型的作用是临时占位,之后通过传来的类型进行推导;
TS进阶-泛型工具类型-基础操作符
- typeof: 获取类型
- keyof: 获取所有键
- in: 遍历枚举类型
- T[K]: 索引访问
- extends: 泛型约束
TS进阶-泛型工具类型-常用工具类型
- Partial: 将类型属性变为可选
- Required: 将类型属性变为必选
- Readonly: 将类型属性变为只读
- Pick 作用:生成一个新类型,映射类型 ; P in K 类似于 js的 for…in语句 ; extends 为泛型约束
- Record
Record的内部定义,接收两个泛型参数;Record后面的泛型就是对象键和值的类型
作用 :义一个对象的 key 和 value 类型
TypeScript实战
TS实战-声明文件
- declare: 三方库需要类型声明文件
- .d.ts :声明文件定义
- @types :三方库 TS 类型包
- tsconfig.json :定义 TS 的配置
TS实战-泛型约束后端接口类型
课程总结
在本期课程中,首先我们要明白为什么要学习TS,因为TS是JS的超集,增强了类型安全,提高生产力。之后是TS基础,从基础类型(boolean 、 number 、 string、undefined 、 null等)、函数类型、Interface、Class类四个方面学习。在TS进阶中,我们了解了高级类型、泛型和泛型工具类型。在最后TS实战部分,学习声明文件 后端接口约束。