TypeScript学习笔记(五)

TypeScript的联合类型

联合类型指的是一个变量有多种可能的类型,多种类型间用符号|分割

  let content: string | number = "content"; // content 既可以是字符串,也可以是数字
  content = 123;

TypeScript的类型保护

as 类型断言

当一个变量有多种可能的类型时,可以通过as关键字来确定类型

  interface StrProp {
    isStr: boolean
    name: '字符串'
  }

  interface NumProp {
    isStr: boolean
    age: 18
  }

  function say(arg: StrProp | NumProp) {
    // console.log(arg.name) // 报错
    if(arg.isStr) {
      // 当 arg 的 isStr 属性为true时,我们就断定 arg 是 StrProp 类型
      console.log((arg as StrProp).name)
    } else {
      console.log((arg as NumProp).age)
    }
  }

in 语法

我们还可以通过in判断变量有没有某个属性从而确定其类型

  interface StrProp {
    isStr: boolean
    name: '字符串'
  }

  interface NumProp {
    isStr: boolean
    age: 18
  }

  function say(arg: StrProp | NumProp) {
    if('name' in arg) {
      console.log(arg.name)
    } else { // 这里的 else 部分 TypeScript 能自动判断
      console.log(arg.age)
    }
  }

typeof 语法

  function test(arg: string | number) {
    if(typeof arg === 'string') {
      return arg.split('')
    } else {
      return 2 * arg
    }
  }

Enum 枚举类型

枚举类型一般用来定义常量

  // enum Sex { // 枚举类型可以不初始化值,默认从0自增
  //   MALE,
  //   FEMALE,
  //   UNKNOW
  // }

  enum Sex {
    MALE = 1, // 可以给定起始值,自动递增
    FEMALE,
    UNKNOW
  }

  function checkSex(sex: Sex) {
    let result = '';
    switch(sex) {
      case Sex.MALE:
        result = '男';
        break;
      case Sex.FEMALE:
        result = '女';
        break;
      case Sex.UNKNOW:
        result = '未知';
        break;
      default:
        break;
    }
    return result;
  }

  console.log(checkSex(1)) // '男'
上一篇:MyBatis学习07--动态sql语句if、where、foreach


下一篇:day07 多态