Typescript将类型声明的属性字段全部或部分变成Optional可选的: Partial和Pick用法


发布者 ourjs  发布时间 1676600049605
关键字 TypeScript 

假设我们建了一个 User 的类型

 export interface User {
id: string,
name: string,
pass: string,
age: number,
model: string,
intro: string,
birthday: number,
ctime: number,
mtime: number,
}

在更新对象时我们可能只更新其中的一个或几个属性,这时需要定义一个全部为可选的接口对象,比如

export interface UserUpdate {
id: string,
name?: string,
pass?: string,
age?: number,
model?: string,
intro?: string,
birthday?: number,
ctime?: number,
mtime?: number,
}

在TypeScript中,Paritial可以实现这样的效果:

 export type UserUpdate = Partial<User>

但有时侯我们希望保留更新对象某些属性,比如ID和密码是必填的,此时可以用: Pick<User, 'id' | 'pass'>

再与之前的定义取交集即可:

 export type UserUpdate = Partial<User> & Pick<User, 'id' | 'pass'>

 

在Typescript这两个类型实现如下:

/**
* 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];
};

/**
* Make all properties in T optional
*/
type Partial<T> = {
[P in keyof T]?: T[P];
};

 









  开源的 OurJS
OurJS开源博客已经迁移到 OnceOA 平台。

  关注我们
扫一扫即可关注我们:
OnceJS

OnceOA