SuperAPI AI 工具集

openapi-ts-v0

编程与开发

查看项目

更新于 10-27 16:22

技能介绍

用途

openapi-ts-v0 技能用于从 OpenAPI 3.0 规范生成 TypeScript 客户端,基于 @hey-api/openapi-ts 工具。其核心目标是以 OpenAPI 规范作为单一事实来源,生成完全类型化的 API 客户端,使客户端方法、错误响应等均从规范中推导出类型。

该技能不涵盖编写 OpenAPI 规范,也不涵盖 API 服务端实现(服务端实现可参考 fastify)。

主要能力

  • 从 OpenAPI 3.0 规范生成 TypeScript 客户端。
  • 客户端方法根据 OpenAPI 规范完全类型化。
  • 错误响应根据 OpenAPI 错误 schema 类型化。
  • 提供 createClient 工厂用于客户端实例化。
  • 可在配置文件中配置输出格式和 schema 类型。
  • Zod schema 和生成的 React Query 插件为可选附加项。

使用方式

配置模式

使用 openapi-ts.config.ts 进行配置,示例:

// openapi-ts.config.ts
import { defineConfig } from '@hey-api/openapi-ts'

export default defineConfig({
  input: './openapi.json',
  output: {
    path: './src/gen',
    format: 'prettier',
  },
  types: {
    enums: 'typescript',
  },
})

客户端使用模式

import { createClient } from './gen/client'

const client = createClient({
  baseUrl: 'https://api.example.com',
})

const response = await client.GET('/users/{id}', {
  params: { path: { id: '123' } },
})

if (response.error) {
  // Handle typed error
  return
}

// response.data is typed from OpenAPI spec

约束

必须(MUST):

  • 使用 openapi-ts.config.ts 进行配置。
  • 在代码中使用之前先生成客户端。
  • 处理 response.error 以获得类型化的错误响应。

建议(SHOULD):

  • 使用 Prettier 格式化(output.format: 'prettier')。
  • 生成 TypeScript 枚举(types.enums: 'typescript')。
  • 针对生成的客户端手写 TanStack Query hooks。
  • 仅在需要运行时验证时添加 Zod schema(schemas.type: 'zod')。
  • 仅当项目选择加入时添加生成的 React Query 插件。

避免(AVOID):

  • 手动编辑生成的代码。
  • 在没有错误处理的情况下使用生成的客户端。
  • 混合生成的客户端代码和手动编写的客户端代码。

适用场景

  • 需要从 OpenAPI 3.0 规范生成类型安全 TypeScript 客户端的项目。
  • 使用 TypeScript v5+ 且开启严格模式的项目。
  • 与 fastify 生成的 OpenAPI 规范配合使用。
  • 与 next 配合使用 API 客户端。
  • 与 TanStack Query 集成(参见 React Query Integration)。

限制

  • 假设使用 @hey-api/openapi-ts v0+。
  • 假设使用 OpenAPI 3.0 规范格式。
  • 假设使用 TypeScript v5+ 且开启严格模式。
  • 默认输出仅为类型和客户端;React Query hooks 需在消费应用中手写。
  • 不涵盖编写 OpenAPI 规范。
  • 不涵盖 API 服务端实现。

参考

  • React Query Integration - 将生成的客户端与 TanStack Query 配合使用。