深入浅出TypeScript | 青训营笔记

68 阅读4分钟

深入浅出TypeScript

为什么要学习TypeScript?

TypeScript VS JavaScript

JavaScript 只是一个脚本语言,并非设计用于开发大型 Web 应用,JavaScript 没有提供类和模块的概念,而 TypeScript 扩展了 JavaScript 实现了这些特性。

  • TypeScript
    JavaScript 的超集,用于解决大型 项目的代码复杂性
    强类型,支持静态和动态类型
    可以在编译期间发现并纠正错误
    不允许改变变量的数据类型
  • JavaScript
    一种脚本语言,用于创建动态网页
    动态弱类型语言
    只能在运行时发现错误
    变量可以被赋值成不同类型

TypeScript带来了什么

类型安全
下一代JS特性
完善的工具链

TypeScript基础

TS基础-基础类型

  1. boolean 、 number 、 string
  2. undefined 、 null
  3. any 、 unknown 、 void
  4. never
  5. 数组类型 []
  6. 元组类型 tuple

TS基础-函数类型

定义: TS 定义函数类型时要定义输入参数类型和输出类型
输入参数: 参数支持可选参数和默认参数
输出参数: 输出可以自动推断,没有返回值时,默认为 void 类型
函数重载 名称相同但参数不同,可以通过重载支持多种类型

TS基础-interface

定义:接口是为了定义对象类型

  • 特点: 可选属性: ?
  • 只读属性: readonly
  • 可以描述函数类型 - 可以描述自定义属性
    总结:接口非常灵活 duck typing

TS基础-类

定义:写法和 JS 差不多,增加了一些定义
特点:

  • 增加了 public 、 private 、 protected 修饰符
  • 抽象类:
    • 只能被继承,不能被实例化
    • 作为基类,抽象方法必须被子类实现
  • interface 约束类,使用 implements 关键字

面向对象的三大特性:封装、继承、多态
封装(Encapsulation):将对数据的操作细节隐藏起来,只暴露对外的接口。外界调用端不需要(也不可能)知道细节,就能通过对外提供的接口来访问该对象,同时也保证了外界无法任意更改对象内部的数据
继承(Inheritance):子类继承父类,子类除了拥有父类的所有特性外,还有一些更具体的特性
多态(Polymorphism):由继承而产生了相关的不同的类,对同一个方法可以有不同的响应。

TypeScript进阶

TS进阶-高级类型

  1. 联合类型 |
  2. 交叉类型 &
  3. 类型断言
  4. 类型别名( type VS interface )
  • 定义:给类型起个别名
  • 相同点:
    1.都可以定义对象或函数
    2. 都允许继承
  • 差异点:
    1. interface 是 TS 用来定义对象, type 是用来定义别名方便使用;
    2. type 可以定义基本类型, interface 不行;
    3. interface 可以合并重复声明, type 不行;

TS进阶-泛型-什么时候需要泛型

官方定义: 软件工程中,我们不仅要创建一致的定义良好的 API ,同时也要考虑可重用性。 组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型, 这在创建大型系统时为你提供了十分灵活的功能。
在像 C# 和 Java 这样的语言中,可以使用泛型来创建可重用的组件, 一个组件可以支持多种类型的数据。 这样用户就可以以自己的数据类型来使用组件。

TS进阶-泛型-基本使用

基本定义

  1. 泛型的语法是 <> 里面写类型参数,一般用 T 表示;
  2. 使用时有两种方法指定类型:
    1. 定义要使用的类型
    2. 通过 TS 类型推断,自动推导类型
  3. 泛型的作用是临时占位,之后通过传来的类型进行推导;

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实战-泛型约束后端接口类型

image.png

课程总结

在本期课程中,首先我们要明白为什么要学习TS,因为TS是JS的超集,增强了类型安全,提高生产力。之后是TS基础,从基础类型(boolean 、 number 、 string、undefined 、 null等)、函数类型、Interface、Class类四个方面学习。在TS进阶中,我们了解了高级类型、泛型和泛型工具类型。在最后TS实战部分,学习声明文件 后端接口约束。