深入浅出TS

87 阅读3分钟

TS 基础

基础类型

  1. boolean, number, string: 需要注意number和Number的区别:TypeScript中指定类型的时候要用 number ,这是TypeScript的类型关键字。而 Number 是 JavaScript 的原生构造函数,用它来创建数值类型的值,这两个是不一样的。包括string、boolean等都是TypeScript的类型关键字,而不是JavaScript语法。
  2. 枚举 enum:定义枚举类型的值时,可以通过 Enum['key'] 或者 Enum.key 的形式获取到对应的值 value。TypeScript 还支持反向映射,但是反向映射只支持数字枚举,不支持字符串枚举。
  3. any, void
  4. never: 表示永远不存在的值的类型,never是任何类型的子类型,所以可以赋值给任何类型
  5. 数组: Array<number>
  6. 元组tuple: 元组可以看做是数组的扩展,它表示已知元素数量和类型的数组,它特别适合用来实现多值返回。确切的说,就是已知数组中每一个位置上的元素的类型,可以通过元组的索引为元素赋值::
  7. unknow:任何类型都可以赋值给unknown类型,但是unknown不可以赋值给其他类型,只能赋值给unknown和any类型,unknow类型的值不能进行任何操作,只能进行等或不等操作 在实际的使用中,应该尽量避免使用any,因为 any 会丢失类型信息,一旦一个类型被指定为 any,那么在它上面进行任何操作都是合法的,所以会有意想不到的情况发生。因此如果遇到无法确定类型的情况,要先考虑使用 unknown。

函数类型

  1. 定义函数时要定义输入参数和输出类型
  2. 输出参数:如果没有返回值,则默认为void
  3. 函数重载:名称相同但是参数不同

接口

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

  1. 可以设置属性
  2. 描述函数类型
  3. 描述自定义类型

特点:

  1. 增加了修饰符:public,protected ,privat
  2. 抽象类:只能被继承,不能实例化 ,抽象方法必须被子类实现

高级类型

  1. 联合类型:& 联合类型允许一个变量或参数可以是多个类型之一。这样可以增加代码的灵活性,特别是在处理多个可能的输入类型时非常有用。

  2. 交叉类型:| 交叉类型将两个或多个类型合并成一个类型。这样可以让我们在一个对象上拥有多个不同的类型特性。

  3. 类型断言:as 在 TypeScript 中让编译器相信一个特定的值所属的类型。它允许开发者手动指定变量的类型,从而覆盖 TypeScript 的类型推导机制。 ``` let someValue: any = "hello world";let strLength: number = (someValue as string).length;

  4. 类型别名:type 类型别名可以为一个现有的类型起一个新的名字,以便更好地理解代码。它还可以帮助简化代码,减少代码的重复性。

泛型

定义:创建一个可重用的组件,不仅要适用当前的数据类型,还要适用未来的

  1. 泛型的作用是临时占位,之后通过对传来的类型进行推导

基础操作符

  1. typeof:获取类型
  2. keyof:获取所有键
  3. in:遍历所有枚举
  4. T[k] : 索引访问
  5. extends: 泛型约束

常用工具类型

  1. Partial Partial 可以将传入的泛型类型 T 中的所有属性变为可选属性。
  2. Required 与 Partial 相反,Required 可以将传入的泛型类型 T 中的所有属性变为必填属性。
  3. Readonly Readonly 可以将传入的泛型类型 T 中的所有属性变为只读属性。
  4. Pick<T, K> Pick 可以从传入的泛型类型 T 中选择一个或多个属性,并组成一个新的类型。
  5. Omit<T, K> 与 Pick 相反,Omit 可以从传入的泛型类型 T 中移除一个或多个属性,并组成一个新的类型。