美文网首页
typeScript 高级类型

typeScript 高级类型

作者: DeadMoon | 来源:发表于2022-01-01 21:17 被阅读0次

    所谓高级类型,是typescript为了保证语言的灵活性,对类型进行一些操作。这些特性有助于我们应对复杂多变的开发场景

    • 交叉类型
      交叉类型是将多个类型合并为一个类型。可以通过 & 来实现合并,生成的新类型包含了所需的所有类型的特性
      看下面这个例子:
       //   我有一个Person 接口, 还有一个 Action 接口, 现在需要一个接口同时有他们共有属性, 我要怎么操作呢?新的接口完全可以将前两个接口属性重新再描述一遍, 更高级的写法是使用交叉类型
       interface Person {
          name: string
          age: number
        }
       interface Action {
          coding():void
       }
       const staff: Person & Action = {
          name: 'xiaohong',
          age: 20,
          coding(){
            console.log('我 12 点还在写代码!!!!!!')
          }
        }
      // 
      
      以上需要注意的是, 如果两个接口存在同属性,但是类型不一致的话, 新的类型将无法赋值
    • 联合类型
      联合类型可以通过管道将变量设置多种类型,赋值时可以根据设置的类型来赋值。也就是说联合类型的变量可以是指定的几种数据类型中的一种,我们可以通过竖线 | 来分隔不同的类型。
      // 想获取一个变量的长度, 这个变量可能是数组,也可能是字符串,我们就可以这样去写
      function getLen<T>(arg: string | T[]) {
        return arg.length
      }
      getLens('hello world')
      getLen<number>([1,2,3])
      
    • 类型别名
      以上两种类型如果在多处使用的话, 会不会显得太麻烦, 类型别名就是为了将这种复杂的类型重新声明为一个新类型
    // 交叉类型
    type Staff = Person & Action
    const staff: Staff = {
      name: 'xiaohong',
          age: 20,
          coding(){
            console.log('我 12 点还在写代码!!!!!!')
          }
    }
    // 联合类型
    type mustLens = string | number[]
    const getLens = function (arg: mustLens) {
      return arg.length
    }
    getLens('1111')
    
    • 类型保护与区分类型
      联合守卫的作用在于触发类型缩小, 用来区分类型集合中不同成员
      const toUpperCase = (stringOrArray: string | string[]) => {
        if (typeof stringOrArray === 'string') {
          return stringOrArray.toUpperCase()
        } else {
          return stringOrArray.map(el => el.toUpperCase())
        }
      }
      
      如何区分类型
      • switch
      const convert = (c: 'a' | 1) => {
        switch (c) {
          case 1:
            return c.toFixed(); // c is I
          case 'a':
            return c.toLowerCase(); // c is 'a'
         } 
      }
      
      • typeof
        同 javascript 必须是 "number", "string", "boolean"或 "symbol"
      • instanceof
        instanceof的右侧要求是一个构造函数

    相关文章

      网友评论

          本文标题:typeScript 高级类型

          本文链接:https://www.haomeiwen.com/subject/ivdaqrtx.html