chenshuai2144 / openapi2typescript

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

对params生成类型,附加到请求体中 #20

Closed liuyang-kevin closed 2 years ago

chenshuai2144 commented 2 years ago

你的改动太多了,做个说明你改动了什么吧。最好有前后不同的例子

不要改动默认的例子,需要搞就新增。

liuyang-kevin commented 2 years ago

我修改了生成模版njk,支持对路径参数使用对象,跟泛型支持返回值差不多,使用 objParams & {id:string;} 对象合并参数的方式,兼容对象赋值,跟字典赋值

export async function EvaluationReportData(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.EvaluationReportDataParams & {
    // path
    /** 报告id */
    id: string;
  },
  options?: { [key: string]: any },
) {
  const { id: param0, ...queryParams } = params;
  return request<API.Response & { data?: API.EvaluationReportData }>(
    `/admin/evaluations/reports/${param0}/data`,
    {
      method: 'GET',
      params: { ...queryParams },
      ...(options || {}),
    },
  );
}

对于路径上的参数,貌似没有自动转换对象,所以我们根据所有接口,在typings.d.ts文件末尾全量生成了 “接口+Params” 的数据类型。

  // 这个项目的确要用
  type uEvaluationReportParams = {
    /** 测评任务id */
    id: string;
  };
  // 这个项目里不会使用(没有路径参数,比如post创建数据),多了一行类型,但是对开发不影响
  type uLoginParams = Record<string, any>;
lifegit commented 2 years ago

修改了生成路径参数使用对象,跟泛型支持返回值差不多,使用objParams & {id:string;}对象合并参数的方式,我有模型对象启动,跟驱动启动版本

export  async  function  Evaluation生成的Params ( 
  // 类型
  ( // 生成的参数) params生成的参数 swagger 默认没有对象) params : API . EvaluationReDataParams  &  { 
    // path 
    /** 报告id */ 
    id : string ; 
  } , 
  options ?: {  [键:字符串]:任何 } ,
) { 
  const  {  id:param0 , ... queryParams  }  =  params ;
  返回 请求< API 。响应 &  { 数据?: API . EvaluationReportData  } > ( 
    `/admin/evaluations/reports/ ${ param0 } /data` , 
    { 
      method : 'GET' , 
      params : { ... queryParams  } , 
      ... ( options  ||  { } ) , 
    } , 
  ) ; 
}

路径上的参数,假装没有自动转换对象,所以我们根据所有的接口,在打字.d.ts 文件完整量生成了“接口类型+参数”的。

  //这个项目确实需要
  type  uEvaluationReportParams  =  { 
    /** 任务任务id */ 
    id : string ; 
  } ; 
  // 这个项目不会使用(没有路径,比如创建数据),汇集里影响一条线类型,但是对开发不
  键入 uParams  =  Record < string ,  any > ;

好像在 #23 ,我也进行了修复,你测试下看呢?

liuyang-kevin commented 2 years ago

更新了。那个parent的逻辑虽然没看懂。。。貌似多套了一层数组?

我调整了代码,有URL路径参数才生成 Params类型,跟历史生成结果一样

lifegit commented 2 years ago

目前来说,query params 是没有问题的呀! image image

liuyang-kevin commented 2 years ago

我是对URL上的参数生成了类型,使用更为方便 image

image

这样更好限定参数类型 image

lifegit commented 2 years ago

好吧,虽然这不是openapi规范,但还是很有用的! 我更倾向于在openapi文档中声明模型去使用。

liuyang-kevin commented 2 years ago

刚才看了下。swagger貌似路径上的参数就是没有类型生成。。。项目比较忙。最近刚用swagger

chenshuai2144 commented 2 years ago

路径上的参数应该都是string把

liuyang-kevin commented 2 years ago

路径上的参数应该都是string把

我没明白你的意思,是说params参数应该是字符串么。

lifegit commented 2 years ago

路径上的参数应该都是字符串把

我没明白你的英文,是说参数参数应该是字符串么。

url 上的参数,都是string

chenshuai2144 commented 2 years ago

@lifegit 这和pr是不是也支持了 url参数,我记得原来不支持会出现bug

lifegit commented 2 years ago

bug倒不是bug。现在的样子: image @liuyang-kevin 的意思是

  params: {
    // query
    /** name、available.use */
    params?: string;
    /** createdAt */
    sort?: string;
  },

再搞成一个结构放在 typings.d.ts

lifegit commented 2 years ago

但是openapi里,url内的参数确实只能string类型哇

chenshuai2144 commented 2 years ago

https://github.com/ant-design/ant-design-pro/issues/9159

看看这个issue 能顺便修掉吗

lifegit commented 2 years ago

ant-design/ant-design-pro#9159

看看这个issue 能顺便修掉吗

fix: openapi2typescript/pull/25