TS进阶用法Partial & Pick
Partial
源码
/**
* Make all properties in T optional
将T中的所有属性设置为可选
*/
type Partial<T> = {
[P in keyof T]?: T[P];
}
使用前
type Person = {
name: string,
age: number
}
type p = Partial<Person>
转换后
type p = {
name?: string | undefined;
age?: number | undefined;
}
- keyof 是干什么的?
keyof我们讲过很多遍了 将一个接口对象的全部属性取出来变成联合类型
- in 是干什么的?
in 我们可以理解成for in P 就是key 遍历 keyof T 就是联合类型的每一项
- ? 是将该属性变为可选属性
?这个操作就是将每一个属性变成可选项
- T[P] 是干什么的?
T[P] 索引访问操作符,与 JavaScript 种访问属性值的操作类似
Pick
源码
/**
* From T, pick a set of properties whose keys are in the union K
*/
type Pick<T, K extends keyof T> = {
[P in K]: T[P];
};
type Person = {
name:string,
age:number,
text:string
address:string
}
type Ex = 'text' | 'age'
type A = Pick<Person,Ex>