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>
贡献者: mankueng