假设我们建了一个 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];
};
回复 (0)
微信扫码 立即评论