zoukankan      html  css  js  c++  java
  • TypeScript——高级类型

    交叉类型

    并集∪适合做对象的混入

    // 交叉类型 -> 
    interface DogInterFace {
        run(): void
    }
    interface CatInterFace {
        jump(): void
    }
    // 此时pet拥有并集的成员 let pet: DogInterFace
    & CatInterFace = { run() {}, jump() {} }

    联合类型

    声明的类型并不确定 可以是其中的一个 ->交集∩ 增强代码的灵活性
    let a: number | string = 'a';
    let b: 'a' | 'b' | 'c' // 字面量联合类型(只可赋值其中的一种)
    let c: 1 | 2 | 3
    • 对象的联合类型
    class Dog implements DogInterFace {
        run() {}
        eat() {}
    }
    class Cat implements CatInterFace {
        jump() {}
        eat() {}
    }
    enum Master { Boy, Girl }
    function getPet(master: Master) {
        let pet = master === Master.Boy ? new Dog() : new Cat();
        pet.eat() // 联合类型在未确定类型下 可访问所有类型的共有成员
        return pet
    }
    索引类型
    可以实现对对象属性的查询和访问
    • 查询操作符 keyof T
    interface Obj {
        a: number,
        b: string
    }
    let key: keyof Obj // 此时类型为 "a" | "b" 的字面量类型
    • 索引访问操作符 T[K]
    let value: Obj['a'] // number
    映射类型
    从旧类型中创建新类型的一种方式
    type ReadonlyObj = Readonly<Obj> // 所有成员变为readonly
    type PartialObj = Partial<Obj>  // 所有成员变为可选
    type PickObj = Pick<Obj, 'a'> // 选取指定成员
    // 可重新指定成员并指定成员类型
    type RecordObj = Record<'x' | 'y' | 'z',Obj>
    条件类型
    是一种由条件表达式所决定的类型
    // T extends U ? X : Y
    type TypeName<T> = 
      T extends string ? "string" :
      T extends number ? "number" :
      T extends boolean ? "boolean" :
      T extends undefined ? "undefined" :
      T extends Function ? "function" :
      "object";
    
    type T1 = TypeName<string> // string
    type T2 = TypeName<string[]> // object
    type T3 = TypeName<string | string[]> // string | object
    
    type Diff<T, U> = T extends U ? never : T
    type T4 = Diff<'a'|'b','a'> // ’b'
    type noNull<T> = Diff<T,null|undefined> // 去除null和undefined

  • 相关阅读:
    Junit单元测试
    win7的6个网络命令
    WOJ1024 (POJ1985+POJ2631) Exploration 树/BFS
    WOJ1022 Competition of Programming 贪心 WOJ1023 Division dp
    woj1019 Curriculum Schedule 输入输出 woj1020 Adjacent Difference 排序
    woj1018(HDU4384)KING KONG 循环群
    woj1016 cherry blossom woj1017 Billiard ball 几何
    woj1013 Barcelet 字符串 woj1014 Doraemon's Flashlight 几何
    woj1012 Thingk and Count DP好题
    woj1010 alternate sum 数学 woj1011 Finding Teamates 数学
  • 原文地址:https://www.cnblogs.com/JessieXie/p/12272745.html
Copyright © 2011-2022 走看看