Skip to content

Partial和Pick

Partial

示例

typescript
type Person={
    name:string,
    age:number,
    text:string
}

/**
 * 此时p的类型为
    type p = {
        name?: string;
        age?: number;
        text?: string;
    }
 */
type p=Partial<Person>

从源码进行解读:

typescript
type key='name'|'age'|'text'

/**
 * 将 T 中的所有属性设为只读
` * 这里T为Person,keyof Person即为上面的key,再对其进行遍历
 * T[P]就相当于Person[name],也就等于string
 * 再对其添加可选?约束,返回一个新的对象类型
 */
type Partial<T> = {
    [P in keyof T]?: T[P];
};

Pick

示例

typescript
/**
 * 此时p2的类型为
    type p2 = {
        age: number;
    }
 */
type p2=Pick<Person,'age'>

/**
 * 此时p3的类型为
    type p3 = {
        name: string;
        age: number;
    }
 */
type p3=Pick<Person,'age'|'name'>

从源码进行解读:

typescript
type key='name'|'age'|'text'

/**
 * 构造一个具有类型 T 的一组属性 K 的类型
 * keyof any即为上面的key,
 * K extends keyof any表示K为any的子集,这样才能确保K的类型可以是any允许的类型
` * 这样才可以传入不作类型限制的T
 * 然后进行遍历,最后返回新的对象类型
 */
type Pick<T, K extends keyof T> = {
    [P in K]: T[P];
};

Released under the MIT License.