-
Partial
为所有属性添加?,也就是把所有的属性都变为可选属性
interface Person { name: string; age: number; } type NewPerson = Partial<Person> const P:NewPerson = { name:'joy' } // name和age都被设置成了可选属性 -
Required
设置所有的属性都是必填的
interface Person { name: string; age?: number } type NewPerson = Required<Person>; const p: NewPerson = { name:'liming' // error age被设置成了必填属性 } -
Record
设置给定的可能属性,都对应给顶类型的“key:value"形式
type r = Record<'a'|'b'|'c',Person>; // 最终实现{a:Person;b:Person;c:Person} -
Pick
将某个类型的子属性挑选出来
type NewPerson = Pick<Pereson,'name'>; // NewPerson 变成{ name: string} -
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 } -
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