zoukankan      html  css  js  c++  java
  • 【TS】一些常用的工具类型

    Partial

    为所有属性添加?这个midfier,也就是设置所有属性都是可选属性。

    interface Person{
          name: string;
          age: number;
    }
    
    type NewPerson = Partial<Person>;
    const p: NewPerson = {
          name: 'ashen';
    };
    // name和age都被设置成了可选属性
    

    Required

    设置所有属性都是必填的。

    interface Person{
          name: string;
          age?: number;
    }
    
    type NewPerson = Required<Person>;
    const p: NewPerson = {
          name: 'ashen'; // error age被设置成了必填属性
    };
    

    Record

    设置给定的可能属性,都对应给定类型的“key:value”形式

    type r = Record<'a'|'b'|'c', Person>;
    // 最终实现 {a: Person; b: Person; c: Person}
    

    Pick

    将某个类型中的子属性挑选出来

    type NewPerson = Pick<Person, 'name'>;
    // NewPerson变成:{name: string}
    

    Exclude

    将某个类型中的子属性剔除

    interface Animal{
          name: string;
          age: number;
          sex: string;
          sayHi: () => string;
          eat: string => void;
    }
    
    type Dog = Exclude<keyof Animal, 'sayHi'> // Dog类中包含除开sayHi的所有属性
    

    当我们需要对interface进行继承时,如果像以下方式处理,会报错

          interface Chicken {
              name: string;
              age: number;
              egg: number;
          }
          interface NewChicken extends Chicken {
              name: number;
          }
    

    此时我们需要将不被overwrite的属性提取出来,再进行继承

          interface NewChicken extends pick<Chicken, 'age'|'egg'>{
              name: number;
          }
    

    但是如果需要提取的属性很多,难道要一个个列举出来吗?此时可以通过Exclude将name属性剔除,再传入Pick进行选择

          interface NewChicken extends pick<Chicken, Exclude<keyof Chicken, 'name'>>{
              name: number;
          }
    

    Omit

    就是以上Pick和Exclude的结合

    Parameters

    得到函数参数类型组成的元祖类型

    type A = Parameters<typeof Array.isArray> // [any]
    type B = Parameters<typeof parseInt> // [number, (string | undefined)?]
    

    ReturnType

    得到函数返回值的类型

    function testFunc(){
          return 123;
    }
    type A = ReturnType<typeof testFunc>; // number
    
  • 相关阅读:
    数据库相关(转)
    sql之left join、right join、inner join的区别
    PHP面试编程
    实验6 shell程序设计一(1)
    实验7 shell程序设计二(1)
    Linux软件安装管理
    Linux常用命令总结
    合唱团
    linux课后作业1
    linux网络服务实验
  • 原文地址:https://www.cnblogs.com/ashen1999/p/14189525.html
Copyright © 2011-2022 走看看