[邂逅深入浅出TypeScript|青训营笔记]

97 阅读4分钟

一、为什么要学习TS

1.趋势 从Vue3.0开始,前端三大主流框架已经全部支持ts,跟着大部队走肯定没问题。

2.易维护

TS vs JS

image.png

TS带来了什么?

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

TS推荐

image.png

github.com/dzharii/awe…:TS开源教程及应用

www.typescriptlang.org/play?#code/…:TS到JS在线编译

二、TS基础

基础类型

image.png

函数类型

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

ps: image.png

interface

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

ps image.png

在ES6中拥有了class关键字,虽然它的本质依旧是构造函数,但是能够让开发者更舒服的使用class了。 TypeScript 作为 JavaScript 的超集,自然也是支持 class 全部特性的,并且还可以对类的属性、方法等进行静态类型检测。

  • 定义:写法与JS差不多,增加了一些定义。

  • 特点:

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

ps image.png

TS进阶

高级类型

TypeScript中除了基本类型之外,还定义了很多高级类型,高级类型包括字面量类型、联合类型、交叉类型、索引类型、映射类型、条件类型、this类型等。

  1. 联合类型 |

联合类型表示多种类型中的一种

  1. 交叉类型 &

交叉类型用于组合多个类型为一个类型,常用于对象类型

image.png

  1. 类型断言 as !

把两种能有重叠关系的数据类型进行相互转换的一种 TS 语法,把其中的一种数据类型转换成另外一种数据类型。类型断言和类型转换产生的效果一样,但语法格式不同。

类型断言有两种形式:

  1. “尖括号” 语法
let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length;
  1. as 语法
let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;
  1. 类型别名(type VS interface)

    • 定义:给类型起个别名

    • 相同点:

      • 都可以定义对象或函数
      • 都允许继承
    • 差异点:

      • interface是 TS 用来定义对象,type 是用来定义别名方便使用;
      • type 可以定义基本类型,interface 不行 ;
      • interface 可以合并重复声明,type 不行;

泛型

什么时候需要泛型

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

基本使用

什么是泛型函数 :

这个函数的参数类型或者返回值的类型是可变的

定义泛型函数 :

function 函数名<类型参数> (形参:类型参数):类型参数{}

  • 在函数名称的后面写 <>(尖括号),尖括号中添加类型变量
  • 类型变量相当于一个类型容器,能够捕获用户提供的类型(具体是什么类型由用户调用该函数时指定)

使用泛型函数

  • 方法1: const 返回值 = 函数名(实参) 类型推论实参的类型,传递给类型参数

  • 方法2 : const 返回值= 函数名<类型实参>(实参) 上述的非空断言就使用了此种方法

    • 此时的 <> 中的就是具体的类型

泛型的问题

太灵活了

  • 默认情况下,泛型函数的类型变量 可以代表多个类型,这导致在泛型函数内部无法访问任何属性

泛型工具类型-基础操作符

  • typeof:获取类型
  • eyof :操作符可以用来获取一个对象类型的所有键。
  • in :操作符可以用来遍历枚举类型。
  • in :操作符可以用来遍历枚举类型。
  • T[K]:索引访问操作符 T[K] 可以用来获取对象类型 T 的属性 K 的类型。
  • extends:条件类型中的 extends 关键字可以用来判断一个类型是否能够赋值给另一个类型。

泛型工具类型-常用工具类型

image.png

TS实战

声明文件

image.png

泛型约束后端接口类型

image.png

image.png