2.0.1 • Published 1 month ago

@liangskyli/openapi-gen-ts v2.0.1

Weekly downloads
-
License
MIT
Repository
github
Last release
1 month ago

openapi to typescript 代码生成工具

通过openapi提供ts类型和接口请求代码自动生成,避免重复性工作,提高开发效率。

  • 基于openapi v3 生成 ts数据类型和请求库接口代码。
  • ts接口类型文件生成
  • 通用请求库接口调用文件生成
  • 如果需要支持swagger2格式
    • 可以设置isSwagger2为true,并配置swaggerPath。
    • swagger2格式的支持情况依赖swagger2openapi转换openapi V3文件的支持情况
    • 建议非必要不要使用swagger2格式,使用openapi v3格式提供更全面的功能逻辑。

安装:

yarn add @liangskyli/openapi-gen-ts --dev

如果项目没有安装prettier,需要安装prettier(^2.0.0 || ^3.0.0)

yarn add prettier --dev

生成方式:

1、CLI 命令方式(推荐)

  • 默认配置文件在运行目录下request.config.ts文件
yarn openapi-gen-ts
  • 配置文件别名request.config2.ts
yarn openapi-gen-ts -c ./request.config2.ts

命令参数

参数说明默认值
-c, --configFilets数据生成配置文件 配置参数见下面./request.config.ts

命令参数 configFile ts数据生成配置文件参数属性

  • 类型:IGenTsDataOpts | IGenTsDataOpts[]

IGenTsDataOpts 参数属性

属性说明类型默认值
isSwagger2是否使用Swagger2生成boolean \| undefinedundefined
swaggerPathisSwagger2为true时,Swagger2 YAML or JSON 格式的文件路径,需要自己根据业务逻辑生成string \| URL
openapiPathisSwagger2不为true时,openapi v3 YAML or JSON 格式的文件路径,需要自己根据业务逻辑生成string \| URL \| OpenAPI3
genTsDir生成ts文件夹所在目录string./
prettierOptions生成文件格式化,默认取项目配置,该配置优先级更高,会合并覆盖项目prettier配置文件,如项目有prettier配置文件,这里无需配置,详情配置见 prettier文档
requestFileajax请求库配置,默认使用axios,自定义二次封装或使用其他请求库时可配置,类型见下面 requestFile属性undefined
requestQueryOmitajax请求库里对公共get参数做了传入处理时,请求接口忽略get参数ts类型声明string[]undefined
requestBodyOmitajax请求库里对公共post参数做了传入处理时,请求接口忽略post参数ts类型声明string[]undefined
openAPITSOptionsopenapi 生成 typescript类型配置Omit<OpenAPITSOptions, 'commentHeader'> 详情配置见 openapi-typescript文档undefined
typescriptJsonSchemaOptionstypescript-json-schema 生成 schema类型配置详情配置见 typescript-json-schema文档undefined

requestFile属性

属性说明类型默认值
pathajax请求库路径,默认使用axios,文件默认导出函数,使用详见下面说明 stringundefined
requestParamsTypeajax请求库文件里导出的请求库方法入参类型定义名称(非默认导出),使用详见下面说明 stringundefined
  • requestFile.path 说明

    • 不设置,默认使用axios,可以自己封装后引入路径使用。
    • ajax请求库路径不做处理,按生成的文件的相对路径或使用绝对路径。
    • 路径下的文件要求默认导出方法,为IAPIRequest类型。
      type IAPIRequest = (param: {
        url?: string;
        method?: OpenapiMethod | Uppercase<OpenapiMethod> | string;
        params?: any;
        path?: any;
        data?: any;
        [k: string]: any;
      }) => Promise<any>;
    • 自定义ajax接口例子:

      import axios from 'axios';
      import type { IAPIRequest } from '@liangskyli/openapi-gen-ts';
      
      const request: IAPIRequest = (config) => {
        // 这里可以封装公共逻辑
        return axios(config).then((res) => res.data);
      };
      
      export default request;
      // 请求库方法入参类型定义名称(非默认导出),requestParamsType设置导出名
      export { AxiosRequestConfig };
    • 生成的schema-api/request-api.ts文件,可直接用于项目请求接口,无需手动编写代码。

  • configFile ts数据生成配置文件示例

    • 配置文件支持使用defineConfig定义ts类型
import { defineConfig } from '@liangskyli/openapi-gen-ts';

export default defineConfig({
  genTsDir: './',
  openapiPath: './openapi/openapiv3-example.json',
});
  • openapi v3 YAML or JSON 格式的文件示例openapi 需要自己根据业务逻辑生成。
  • openapi v3 method 支持说明
    • 支持任意openapi接口类型(如:"get" | "put" | "post" | "delete" | "options" | "head" | "patch" | "trace")
    • 支持相同url,对应多个method请求
    • 支持responses 200或default的第一个响应数据(优先200)
    • 支持任意媒体类型(MediaType)的响应数据
    • 支持任意媒体类型(MediaType)的Query请求数据
    • 支持任意媒体类型(MediaType)的Body请求数据,多个媒体类型合并处理
  • 生成ts文件结构指引 文档
  • 接口API使用指引 文档

2、方法调用方式

genTsData函数参数

  • 和命令参数configFile属性一致,见上面说明(命令参数 configFile ts数据生成配置文件参数属性)。
  • 使用例子
import genTsData from '@liangskyli/openapi-gen-ts';
genTsData({
  genTsDir: './',
  openapiPath: './openapi/openapiv3-example.json',
}).then();
2.0.1

1 month ago

2.0.0

2 months ago

2.0.0-beta.1

5 months ago

2.0.0-beta.0

5 months ago

1.2.0

10 months ago

1.2.2

7 months ago

1.3.0

5 months ago

1.2.1

9 months ago

1.2.0-beta.0

10 months ago

1.1.0

11 months ago

1.0.1

12 months ago

1.0.0

1 year ago

1.0.0-beta.2

1 year ago

1.0.0-beta.1

1 year ago

1.0.0-beta.0

1 year ago

0.7.0

1 year ago

0.6.0

1 year ago

0.3.0

2 years ago

0.5.0

2 years ago

0.4.0

2 years ago

0.2.2

2 years ago

0.2.1

2 years ago

0.2.0

2 years ago

0.2.0-beta.3

2 years ago

0.2.0-beta.2

2 years ago

0.2.0-beta.1

2 years ago

0.2.0-beta.0

2 years ago

0.1.0

2 years ago