TS 一个类型的部分转换为可选

发布时间 2023-07-09 16:33:51作者: EhuanRum
type WithPartial<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;

interface RequestOption {
  url: string,
  method: 'GET' | 'POST' | 'PUT',
  headers: {[key: string]: string},
  body: string
}

interface ResponData {
  status: string,
  data: any,
  error: Error
}

function request(option: WithPartial<RequestOption, 'headers'|'body'>): Promise<Omit<ResponData, 'error'> | Omit<ResponData, 'data'>> {
  return Promise.resolve({
    status: 'AT-400',
    data: {}
  });
}
WithPartial 为标题说的方法,该方法由两部分组成,
Omit<T, K> : 为从T中剔除K属性
Partial<Pick<T, K>> :Pick<T, K> 为从T中选出K属性,由Partial转为可选