一切福田,不離方寸,從心而覓,感無不通。

Typescript 常用特性小结

前言

类型编程在项目中的重要性不言而喻,本文将总结一些 Typescript 的常用特性,帮助大家熟悉掌握 Typescript 的使用。

一、高级类型

交叉类型

交叉类型就是通过 & 符号,将多个类型合并为一个类型。

联合类型

联合类型就是通过 | 符号,表示一个值可以是几种类型之一。

 

字符串字面量类型

字符串字面量类型就是使用一个字符串类型作为变量的类型。

 

数字字面量类型

数字字面量类型就是使用一个数字作为变量的类型。

 

布尔字面量类型

数字字面量类型就是使用一个布尔值作为变量的类型。

 

字符串模板类型

字符串模板类型就是通过 ES6 的模板字符串语法,对类型进行约束。

 

二、操作符

keyof

keyof 用于获取某种类型的所有键,其返回值是联合类型。

 

typeof

typeof 用于获取对象或者函数的结构类型。

 

in

in 用于遍历联合类型。

 

T[K]

T[K] 用于访问索引,得到索引对应的值的联合类型。

 

三、运算符

非空断言运算符

非空断言运算符 ! 用于强调元素是非 null 非 undefined,告诉 Typescript 该属性会被明确的赋值。

 

可选链运算符

可选链运算符 ?. 用于判断左侧表达式的值是否是 null 或 undefined,如果是将停止表达式运行。

 

空值合并运算符

空值合并运算符 ?? 用于判断左侧表达式的值是否是 null 或 undefined,如果不是返回右侧的值。

 

数字分隔符

数字分隔符 _ 用于对长数字进行分割,便于数字的阅读,编译结果将会自动去除 _。

 

四、类型别名

类型别名用来给一个类型起个新名字。

 

五、类型断言

类型断言就是告诉浏览器我非常确定的类型。

 

七、类型守卫

类型守卫就是一些表达式,它们会在运行时检查以确保在某个作用域里的类型。

 

八、泛型

1. 泛型介绍

泛型就是通过给类型传参,得到一个更加通用的类型,就像给函数传参一样。

如下我们得到一个通用的泛型类型 T1,通过传参,可以得到 T2 类型 string[]、T3 类型 number[]:

 

如上 T 是变量,我们可以用任意其他变量名代替他。

 

2. 命名规范

在 Typescript 泛型变量的命名规范中,默认了 4 种常见的泛型变量名,为提高可读性,不建议改为其他的变量名来定义。

  • T:表示第一个参数
  • K: 表示对象的键类型
  • V:表示对象的值类型
  • E:表示元素类型

3. 泛型接口

泛型接口和上述示例类似,为接口类型传参:

 

4. 泛型约束(extends 操作符)

有时候,我们需要对泛型参数进行约束,限制每个变量的类型。Typescript 通过 extends 实现类型约束。

泛型约束语法如下:

 

通过 T extends Length 约束了 T 的类型,必须是包含 length 属性,且 length 的类型必须是 number。

 

通过 extends 约束了 K 必须是 T 的 key。

 

5. 泛型参数默认值

泛型参数默认值,和函数参数默认值一样,在没有传参时,给定默认值。

 

6. 泛型条件

条件类型和 Js 的条件判断意思一样,都是指如果满足条件,就 xx,否则 xx。

条件类型表达式:

 

如果 T 能够赋值给 U,那么类型是 X,否则类型是 Y。

 

7. 泛型推断(infer 操作符)

泛型推断的关键字是 infer,语法是 infer 类型

一般是和泛型条件结合使用,结合实际例子理解:

如果泛型参数 T 能赋值给类型 {t: infer Test},那么类型是推断类型 Test,否则类型是 string。

 

  • 泛型参数 number 没有 t 属性,所以类型是 string

 

  • 泛型参数的 t 属性是 boolean,所以类型是推断类型 boolean

 

泛型参数的 t 属性是 () => void,所以类型是推断类型 () => void

 

8. 泛型工具类型

映射类型

映射类型,它是一种泛型类型,可用于把原有的对象类型映射成新的对象类型。

常见的映射类型语法:

 

举例说明,通过映射类型将所有属性变为可选:

 

Partial

Typescript 已将一些常用的映射类型进行封装,如 Partial 就是用于将泛型的全部属性变为可选。

 

Required

Required 将泛型的所有属性变为必选。

 

语法-?,是把?可选属性减去的意思

Readonly

Readonly 将泛型的所有属性变为只读。

 

Pick

Pick 从类型中选择一下属性,生成一个新类型。

 

Record

Record 将 key 和 value 转化为 T 类型。

 

keyof any 对应的类型为 number | string | symbol,是可以做对象键的类型集合。

ReturnType

ReturnType 获取 T 类型对应的返回值类型。

 

Exclude

Exclude 将某个类型中属于另一个的类型移除掉。

 

Extract

Extract 从 T 中提取出 U。

 

Omit

Omit 使用 T 类型中除了 K 类型的所有属性,来构造一个新的类型。

 

NonNullable

NonNullable 用来过滤类型中的 null 及 undefined 类型。

 

Parameters

Parameters 用于获得函数的参数类型组成的元组类型。

 

参考资料

form:https://juejin.cn/post/7102970819231350791