chenshuai2144 / openapi2typescript

一个被大范围使用的小工具
312 stars 136 forks source link

关于getType函数,默认返回类型any修改为unknown的建议 #49

Open liuyang-kevin opened 2 years ago

liuyang-kevin commented 2 years ago

最近在弄hook,想解构类型,发现分析器被any类型阻断了,是不是改成unknown更为合理

  type Response = {
    code?: number;
    data?: unknown; // 生成any情形下, 下面hook的类型分析,就会被阻断
    msg?: string;
  };

/** 获取当前登录账号信息 GET /admin/login */
export async function LogInfo(options?: { [key: string]: any }) {
  return request<API.Response & { data?: API.AdminInfo }>('/admin/login', {
    method: 'GET',
    ...(options || {}),
  });
}

export function usePSP2<R extends (() => Promise<Awaited<ReturnType<R>>>)>(req: R) {
  type PSPBody = Awaited<ReturnType<R>>;
  type DataOf<T> = T extends { data?: infer E } ? E : never; // 这里就无法分析到正确的类型
  const [isLoading, setLoading] = useState(true);
  const [body, setBody] = useState<PSPBody>();
  const [data, setData] = useState<DataOf<PSPBody>>();

  req().then(_body => {
    setBody(_body)
  });
  return {
    isLoading,
    body,
    data,
  };
}

const { body, data } = usePSP2(wj.psp.LogInfo);  // 生成any情形下,这里data就无法分析到正确的类型,unknown是可以的
chenshuai2144 commented 2 years ago

来个pr吧