最好用的 生成 TypeScript 类型和 API 请求代码的工具

orval 的目标是为你生成整个 API 调用层。你给它一个 OpenAPI 规范,它还你一整套可以直接在代码中导入和使用的 TypeSafe 的 API 函数。

各个库的优缺点 推荐使用 orval

@umijs/max-plugin-openapi openapi-ts-request orval
优点 配合umi配置简单 配置简单快速 适合大型项目,生成的类型很齐全,包括枚举都会生成
缺点 生成的类型简单(不会生成枚举或按文件生成) 生成的类型简单(不会生成枚举或按文件生成) 灵活性相对较低

orval 主要好处

  • 开箱即用,极高效率 适合大项目和新项目
  • 类型安全全覆盖
  • 强大的集成
  • 高度可配置
  • 现成配置 支持 angular-app react-app react-query vue-query next-app 等 真正的开箱即用。

安装

pnpm add orval --save-dev

配置文件 orval.config.js

module.exports = {
  api: {
    input: 'http://localhost/api-doc/openapi.json',
    output: {
      mode: 'split',
      target: './src/services/openapi.ts',
      schemas: './src/services/models',
      override: {
        mutator: {
          name: 'customClient',
          path: './src/services/request.ts',
        }
      },
      mock: false,
      prettier: true,
    },
  },
}

自定义请求函数

不使用 orval提供的请求函数,自定义请求函数 需要是RequestConfig类型

 interface RequestConfig {
   method: 'get' | 'put' | 'patch' | 'post' | 'delete';
   url: string;
   params?: any;
   data?: any;
   responseType?: string;
 }
  • override.mutator.name 自定义请求函数 导出的请求函数名称。
  • override.mutaror.path 自定义请求函数 的路径。

其中自定义请求函数。如果有params参数的, 用 queryString 或者自定义拼接请求参数。

 const queryString = params?`?${new URLSearchParams(
        Object.entries(params).reduce(
          (acc, [key, value]) => {
            if (value !== undefined) {
              acc[key] = String(value)
            }
            return acc
          },
          {} as Record<string, string>
        )
      ).toString()}`
    : ''

运行脚步

  • 自定义nodeJS 脚本 orval.ts
exec('npx orval --config orval.config.cjs', (error, stdout, stderr) => {
    if (error) {
        console.error('Exec error:', error);
    }
    if (stderr) {
        console.error('Stderr:', stderr);
    }
    if (stdout) {
        console.log('Stdout:', stdout);
    }
});
  • NPM 执行脚本
"script": {
    "orval" : "orval --config ./orval.config.js",
    "orval-ts": "ts-node ./orval.ts"
}
posted @ 2025-10-17 17:14  boygdm  阅读(8)  评论(0)    收藏  举报