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
    
  • 相关阅读:
    Swift try try! try?使用和区别
    Sitemesh 3 配置和使用(最新)
    idea + mybatis generator + maven 插件使用
    (五)Hololens Unity 开发之 手势识别
    (四)Hololens Unity 开发之 凝视系统
    (二)Hololens Unity 开发入门 之 Hello HoloLens~
    (三)Hololens Unity 开发之 语音识别
    (一)Hololens Unity 开发环境搭建(Mac BOOTCAMP WIN10)
    iOS多线程技术方案
    基于OpenSSL的RSA加密应用(非算法)
  • 原文地址:https://www.cnblogs.com/ashen1999/p/14189525.html
Copyright © 2011-2022 走看看