你还在重复写ts?typescript常见的组合使用

144 阅读1分钟

原始类型,比如通讯录Contact

export interface Contact{
  name: string; // 姓名
  phone?: string; // 手机号
  email: string; // 邮箱
  avatar: string; // 头像
  userid: string; // id
}

(1)新增字段

export interface ContactAddress extends Contact {
  address: string;
}

(2)Omit使用

export type OmitEmailAvatarContact = Omit<Contact, 'email' | 'avatar'>;
// 也就是等于
OmitEmailAvatarContact {
  name: string;
  phone?: string; 
  userid: string;
}

(3)Pick使用

export interface ContactPick extends Pick<Contact, 'name' | 'phone'> {}

ContactPick {
  name: string;
  phone?: string; 
}

(4)统一给类型加上指定类型( 区别于简单的扩展字段),函数化

export type WithId<T, P = string> = T & { id: P };
export interface ContactWithId = WithId<Contact>

(5)Partial将类型中所有选项变为可选,即加上?(官方提供)

Required将类型中所有选项变为必选,去除所有?(官方提供)

export interface PartialContact= Partial<Contact>
PartialContact{
  name?: string; // 姓名
  phone?: string; // 手机号
  email?: string; // 邮箱
  avatar?: string; // 头像
  userid?: string; // id
}

export interface RequiredContact= Required<Contact>
RequiredContact{
  name: string; // 姓名
  phone: string; // 手机号
  email: string; // 邮箱
  avatar: string; // 头像
  userid: string; // id
}