-
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