Web安全实战宝典完结无密

#1

download:Web安全实战宝典完结无密

今天给大家分享的主题是一同来做类型体操。

主要分为 4 个局部停止引见:

  1. 类型体操的背景,经过背景理解为什么要在项目中参加类型体操;
  2. 理解类型体操的主要类型、运算逻辑、和类型套路;
  3. 类型体操理论,解析 TypeScript 内置高级类型,手写 ParseQueryString 复杂类型;
  4. 小结,综上分享,沉淀结论。

一、背景

在背景章节引见的是什么是类型,什么是类型平安,怎样完成类型平安,什么是类型体操?

以理解类型体操的意义。

1. 什么是类型?

理解什么是类型之前,先来引见两个概念:

  • 不同类型变量占领的内存大小不同

boolean 类型的变量会分配 4 个字节的内存,而 number 类型的变量则会分配 8 个字节的内存,给变量声明了不同的类型就代表了会占领不同的内存空间。

  • 不同类型变量可做的操作不同

number 类型能够做加减乘除等运算,boolean 就不能够,复合类型中不同类型的对象可用的办法不同,比方 Date 和 RegExp,变量的类型不同代表能够对该变量做的操作就不同。

综上,能够得到一个简单的结论就是,类型就是编程言语提供对不同内容的笼统定义。

2. 什么是类型平安?

理解了类型的概念后,那么,什么是类型平安呢?

一个简单的定义就是,类型平安就是只做该类型允许的操作。比方关于 boolean 类型,不允许加减乘除运算,只允许赋值 true、false。

当我们能做到类型平安时,能够大量的减少代码中潜在的问题,大量进步代码质量。

3. 怎样完成类型平安?

那么,怎样做到类型平安?

这里引见两品种型检查机制,分别是动态类型检查和静态类型检查。

3.1 动态类型检查

Javascript 就是典型的动态类型检查,它在编译时,没有类型信息,到运转时才检查,招致很多躲藏 bug。

什么是类型体操

上面引见了类型的一些定义,都是大家熟习的一些关于类型的背景引见,这一章节回归到本次分享的主题概念,类型体操。

理解类型体操前,先引见 3 品种型系统。

4.1 简单类型系统

简单类型系统,它只基于声明的类型做检查,比方一个加法函数,能够加整数也能够加小数,但在简单类型系统中,需求声明 2 个函数来做这件事情。

int add(int a, int b) {
    return a + b
}
double add(double a, double b) {
    return a + b
}
复制代码

4.2 泛型类型系统

泛型类型系统,它支持类型参数,经过给参数传参,能够动态定义类型,让类型愈加灵敏。

T add(T a, T b) {
    return a + b
}
add(1, 2)
add(1.1, 2.2)
复制代码

但是在一些需求类型参数逻辑运算的场景就不适用了,比方一个返回对象某个属性值的函数类型。

function getPropValue(obj: T, key) {
  return obj[key]
}
复制代码

4.3 类型编程系统

类型编程系统,它不只支持类型参数,还能给类型参数做各种逻辑运算,比方上面提到的返回对象某个属性值的函数类型,能够经过 keyof、T[K] 来逻辑运算得到函数类型。

function getPropValue<
  T extends object, 
  Key extends keyof T
>(obj: T, key: Key): T[Key] {
  return obj[key]
}
复制代码

总结上述,类型体操就是类型编程,对类型参数做各种逻辑运算,以产生新的类型。

之所以称之为体操,是由于它的复杂度,右侧是一个解析参数的函数类型,里面用到了很多复杂的逻辑运算,等先引见了类型编程的运算办法后,再来解析这个类型的完成。

二、理解类型体操

熟习完类型体操的概念后,再来继续理解类型体操有哪些类型,支持哪些运算逻辑,有哪些运算套路。

1. 有哪些类型

类型体操的主要类型罗列在图中。TypeScript 复用了 JS 的根底类型和复合类型,并新增元组(Tuple)、接口(Interface)、枚举(Enum)等类型,这些类型在日常开发过程中类型声明应该都很常用,不做赘述。