• 【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
    
  • 相关阅读:
    codevs1842 递归第一次
    codevs1501 二叉树最大宽度和高度
    (noi.openjudge.cn) 1.5编程基础之循环控制T36——T45
    (noi.openjudge.cn) 1.7编程基础之字符串T21——T30
    (noi.openjudge.cn) 1.9编程基础之顺序查找T06——T15
    (noi.openjudge.cn) 1.9编程基础之顺序查找T01——T05
    (noi.openjudge.cn) 1.7编程基础之字符串T31——T35
    (noi.openjudge.cn) 1.8编程基础之多维数组T21——T25
    Objective-C/C++混编编译器设置
    UITableView使用指南
  • 原文地址:https://www.cnblogs.com/ashen1999/p/14189525.html
Copyright © 2020-2023  润新知