1、Type Inference 类型推论

  • 可以推断出我们赋值的过程中这个变量应该是个什么类型

    1. let str = 'str'
    2. str = 123 // => 会报错 type inference 会在我们没有明确类型的时候推测出一个类型

    2、Union Types 联合类型

  • 顾名思义 可以给一个变量 赋予两种数据类型

    1. let numberOrString: number | string
    2. numberOrString = 'Gavin'
    3. numberOrString = 22
    4. // 同时 该变量可访问两种类型共有属性和方法
    5. numberOrString.toString()
    6. numberOrString.valueOf()

    6.3、As 类型断言

  • 当使用联合类型时 访问其中一种类型的属性和方法时 会报错 所以这种情况就会使用到 类型断言

    1. // as 类型断言 可以把联合类型中的不确定类型 转换成确定类型并使用该类型的属性和方法
    2. function getLength (input: String | number): number {
    3. // 把 str 指定为 String类型
    4. const str = input as string
    5. if (str.length) {
    6. return str.length
    7. } else {
    8. const number = input as number
    9. return number.toString().length
    10. }
    11. }
  • 注意:类型断言不是类型的转换 把它断言成一个联合类型中不存在的类型时会出现问题

  • 这样的问题可以使用TypeScript中的一个特性type guard 当遇到联合类型的时候使用条件语句可以自动帮助我们缩小条件类型的范围

    1. function getLength (input: String | number): number {
    2. // 如果类型为String的话直接取input的length
    3. if (typeof input == 'String') {
    4. return input.length
    5. // 否则就把类型转换为String再取input的length
    6. } else {
    7. return input.toString().length
    8. }
    9. }