TypeScript"修炼"之路 - 图1


以上基本都是个人的基础信息,以及logo。接下来我们一起学习typescript基础知识,俗话说“基础不牢,地动山摇”,废话不多说,让我们开始吧

1. 布尔类型

  1. let married: boolean = false
  2. const married1: boolean = true
  • 通过类型声明boolean表示该变量赋值的类型,如果一旦被声明为了boolean类型,就不能赋值为其他的基本数据类型(下面同样)

    2. 数字类型

    1. let num: number = 10

    3. 字符串类型

    1. let str: string = '11'

    4. 数组类型

    1. const arr1: number[] = [1, 2, 3]
    2. const arr2: Array<number> = [3, 4, 5]
  • 上述提到了两种定义数组类型的方式,其中第一种方式就是按以往的类型进行声明,但是第二种我们这里使用了泛型,泛型的话后面会进行介绍

    5. 元组类型

    1. // 元组类型
    2. const arr3: [number, string] = [1, '3']

    | 元组 | 数组 | | —- | —- | | 每一项可以定义不同的类型 | 每一项都是同一种类型 | | 有预定义的长度 | 没有长度限制 | | 用于表示一个固定的结构 | 用于表示一个列表 |

6. 枚举类型

  1. // 普通枚举类型
  2. enum IStatus {
  3. ADD,
  4. DELETE,
  5. EDIT,
  6. SELECT
  7. }
  8. // 常数枚举类型
  9. const enum Colors {
  10. Red,
  11. Yellow,
  12. Blue
  13. }

7. 任意类型

  1. let test: any
  2. test = true
  3. test = 1
  4. test = '1'
  5. test = function () {}
  • any 就是可以赋值给任意类型
  • 第三方库没有提供类型文件时可以使用
  • 类型转换遇到困难时
  • 数据结构太复杂难以定义
  • 任何类型跟any交叉都是any(可以用来判断是否是any) **type_IsAny_<_T_> =0extends1&_T_?_true_:_false_**

    1. // 备注:任何类型跟any交叉都是any
    2. // 方法1
    3. type IsAny<T> = 0 extends 1 & T ? true : false

    8. null和undefined类型

    1. let x: number
    2. x = null
    3. x = undefined
  • 配置tsconfig.json中的配置{strictNullChecks: false}, 可以设置不进行check,可以赋值为null/ undefined

  • null和undefined是其他类型的子类,可以赋值给其他类型,例如:数字类型

    9. void类型

    1. // void 表示函数没有返回值
    2. function greeting(name: string): void {
    3. console.log('hello', name)
    4. }

    10. never类型

  • never是其他类型的子类型,代表不会出现的值(后续我们在修仙之路上会用到很多关于never的实例)

    11. never和void区别

  • void可以被赋值为null和undefined的类型,never则是一个不包含值的类型

  • 拥有void返回值类型的函数能正常运行,拥有never返回值类型的函数就无法正常返回,无法终止

    12. 联合类型

    1. // 表示联合类型
    2. let aaa: number | string
    3. aaa = 1
    4. aaa = '1'
  • 联合类型表示取值可以为多种类型中的一种

  • 未赋值时联合类型上只能访问两个类型共有的属性和方法

    13. 类型断言

    ```typescript // 使用断言 将联合类型断言为一种固定的类型 let bbb: number | string (bbb as number).toFixed(2)

// 双重断言 interface Person { name: string; age: number; } const person = ‘zhufeng’ as any as Person; // ok

  1. - 类型断言可以将一个联合类型的变量,指定为一个更加具体的类型
  2. - 不能将联合类型断言为不存在的类型
  3. <a name="DJzKU"></a>
  4. ## 14. 字面量类型和类型字面量
  5. ```typescript
  6. const up:'Up'= 'Up';
  7. const down: "Down" = "Down";
  8. const left: "Left" = "Left";
  9. const right: "Right" = "Right";
  10. type Direction = 'Up' | 'Down' | 'Left' | 'Right';
  • 字面量类型的要和实际的值的字面量一一对应,如果不一致就会报错

    15. 字符串字面量 vs 联合类型

  • 字符串字面量类型用来约束取值只能是某几个字符串中的一个, 联合类型(Union Types)表示取值可以为多种类型中的一种

  • 字符串字面量 限定了使用该字面量的地方仅接受特定的值,联合类型 对于值并没有限定,仅仅限定值的类型需要保持一致

    17. unknown

  • unknown 是any类型对应的安全类型

  • unknown 和 any的主要区别是unknown类型会更加严格,在对unknown类型的值执行大多数操作之前,我们必须进行某种形式的检查。而在对any类型的值执行操作之前,我们不必进行任何检查
  • 而且unknown 只能赋值给unknown 以及any
  • 任何类型都可以赋值给unknown类型
  • 在联合类型中,unknown类型会吸收任何类型,这就意味着如果任一组成类型是unknown,联合类型也是unknown
  • 在交叉类型中,任何类型都可以吸收unknown类型,这就意味着任何类型跟unknown交叉都不会修改其类型
  • never是unknown的子类型
    1. // 可以用来判断any类型
    2. // 备注:unknown 只能复制给unknown 以及any
    3. type IsAny<T> = [unknown] extends [T] ? [T] extends [string] ? true : false : false

    16. 函数

    1. 函数的定义

    2. 函数表达式

    3. 函数无返回值

    4. 可选参数

    5. 默认参数

    6. 剩余参数

    7. 函数重载