fjc0k/yapi-to-typescript

有无办法令 request 根据传入参数决定返回类型

TIS-OMiddle opened this issue · 2 comments

背景:

  1. 返回结构普遍有一层封装: {code: 0, data: {}, message: ''}
  2. 生成的时候指定了dataKey: 'data'
  3. 实际请求中,根据传入的参数,决定要不要直接返回 {code: 0, data: {}, message: ''} 这种结构
  4. 需求是大部分情况下只用到data,但有时也需要拿到外面的{code:0, message:''},这种类型有想法💡吗😢

大概意思如下:

// 外层封装
interface Wrapper<T> {
  code: number;
  data: T;
  message: string;
}

// origin 为 true时,返回Wrapper包装类型
function request<TResponseData>(
  payload: RequestFunctionParams,
  origin: true,
  options?: RequestOptions
): Promise<Wrapper<TResponseData>>;

// origin 为 false时,返回生成的相应类型
function request<TResponseData>(
  payload: RequestFunctionParams,
  origin?: false,
  options?: RequestOptions
): Promise<TResponseData>;

这样写request本身没啥问题,但是经过工厂函数封装后,ts就一直推断origin类型为false|undefined了

fjc0k commented

目前做不到哈。建议把真正需要的数据都放进 data,code、message 只做统一校验。

目前实践中采用全局统一处理,有异常时通过Promise.reject抛出原始对象