0
点赞
收藏
分享

微信扫一扫

深入理解TS笔记(1)—— TS的类型系统

岛上码农 2022-03-18 阅读 249
typescript

TS的类型系统

基本概念

下面将说明几种基础的TS类型注解

  • 基本类型注解

    • JS的基本类型可以用作类型注解,如可以声明某个变量的类型是number。
  • 数组注解

    • 数组注解用于为数组添加类型注解,它一般由 元素类型 + []组成(如,boolean[])。
  • 接口注解

    • 接口注解用于将多个类型注解合并为一个类型注解,这就允许我们利用接口为对象等规定类型。
  • 内联类型注解

    • 内联类型注解功能类似于接口注解,可以用于约束对象等的类型。(如果需要为多个对象提供相同的类型,那么还是建议使用接口注解)。
  • 特殊类型

    • TS中还存在一些特殊类型

      • any

        • 当TS类型检查器遇到any时,会不对定义为any类型的变量进行类型检查。(这表示定义为any类型的变量可以是任何类型的)。

          • 定义为any类型的变量可以接受任意类型的数据。
          • 定义为any类型的变量可以兼容任意类型的变量。(也就是说任意类型的变量都可以赋值给any类型的变量)。
      • null

        • null可以赋值给任意类型的变量。
      • undefined

        • undefined字面量可以赋值给任意类型的变量。
      • void

        • void用于表示一个函数没有返回值。
  • 泛型

    • 泛型可以用于函数、类、接口,它一般用于约束多个变量,要求它们具有相同的类型,但是并不指定具体的类型。
  • 联合类型

    • 当你想要一个变量的类型可能是多种类型之一(如,string或number都可以),这时就可以使用联合类型。

      • 联合类型使用 |。
  • 交叉类型

    • 交叉类型是将多个类型合并为一个类型。

      • 交叉类型使用 & 。
  • 元组类型

    • 元组类型用于给元组(JS中一般使用数组表示元组,元组可以包含任意数量的成员,元组中的每个元素类型可以不同)添加类型注解。
  • 类型别名

    • 类型别名用于为一些类型注解创建别名。

      • 类型别名使用 type 。

深入接口

接口和内联注解的区别

  • 内联注解作用类似于接口,用于声明变量的结构,但是内联注解只是一次性的。

使用接口约束类的结构的方法

  • 使用implements关键字,可以让一个接口来约束一个类的结构。

    • class myPoint implements Point

      • myPoint类的结构将受到接口Point的约束。

什么时候使用接口

  • 接口一般用于约束对象、函数等引用类型(因为接口是结构化的),同时接口还可以约束类的实现。

深入枚举

我们可以先来看看其他语言中的枚举是做什么的。

  • Java

    • 在Java中,枚举是一个特殊的类,一般用于表示一组常量。
  • C语言

    • 在C语言中,枚举也是用于表示一组常量,如一个星期7天,用1-7表示,C语言可以使用枚举为每个整数定义一个别名。

      • enum 枚举名{
        标识符①[=整型常数],
        标识符②[=整型常数],

        标识符N[=整型常数],
        }枚举变量;

TS中的枚举

  • 数字枚举

    • 在TS中,如果定义一个枚举时,没有将字符串类型等的数据赋值给枚举成员,那么就是一个数字枚举。(且枚举成员的值从0开始递增)。

    • 如何将一个变量声明为一个写好的数字枚举。

      • 假设有数字枚举 Card

        • 可以使用let a = Card.Clubs
        • 也可以使用 let a: Card.Clubs。
    • 数字枚举存在双向映射,原理在于从数字枚举编译成的JS代码。

  • 字符串枚举

    • 字符串枚举的作用

      • 字符串枚举将会提供有意义且可供调试的字符串。
  • 常量枚举

    • 常量枚举的作用

      • 常量枚举一般用于性能提升。

        • 当使用枚举成员为变量赋值时,可以使用常量枚举提升性能(原理和编译出的JS代码有关)。
    • 声明一个常量枚举的方法

      • 在enum关键字前面加上const,表示这是一个常量枚举。
  • 为枚举添加静态方法

    • 由于枚举编译成的JS代码中,实际上是一个对象,所以我们也可以为枚举添加静态方法。

      • 使用namespace关键字+枚举名称,就可以为指定枚举添加静态方法。
举报

相关推荐

0 条评论