TS中一些常用工具类型

239 阅读1分钟
  1. Partial

    为所有属性添加?,也就是把所有的属性都变为可选属性

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

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

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

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

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

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

    type NewPerson = Pick<Pereson,'name'>;
    // NewPerson 变成{ name: string}
    
  5. Exclude

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

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

    当我们需要对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'>>{
      namre:number
    }
    
  6. Omit

    就是以上Pick和Exclude的结合,可以从一个对象中剔除一些属性,得到剩下的属性

  7. Parameters

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

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

    得到函数返回值的类型

    function testFunc(){
     	return 123;
    }
    type A = ReturnType<typeof testFunc>; // number