vladkens

apigen-ts

Рисунок тушью: дорожный знак, человек копает рядом с кучей земли.

Типизированный TypeScript-клиент из OpenAPI-спеки, одним файлом.

apigen-ts одной командой превращает OpenAPI-спеку в типизированный TypeScript-клиент. На выходе один файл api-client.ts без runtime-зависимостей. Каждый метод возвращает точный тип ответа из схемы, поэтому не нужны ни приведения типов, ни any. Запросы идут через нативный fetch, который можно подменить для авторизации, ретраев или логирования, а большие схемы можно фильтровать по пути или тегу.

Больше всего он полезен, когда backend не на JavaScript. Например, с FastAPI и React контракты через общий код не расшаришь, а сгенерированный клиент держит обе стороны в синхроне.

Стандартный генератор написан на Java и создаёт кучу файлов. Какое-то время я использовал swagger-typescript-api, пока там несколько раз не поменяли интерфейсы и мне не пришлось чинить несколько проектов. У меня есть пара проектов на NestJS и FastAPI в режиме поддержки, которым нужен только простой и стабильный генератор без частых изменений, поэтому я написал свой.

Установка

pnpm add -D apigen-ts

Клиент генерируется из локального файла или по URL:

pnpm apigen-ts ./openapi.json ./api-client.ts
pnpm apigen-ts https://petstore3.swagger.io/api/v3/openapi.json ./api-client.ts

Дальше просто используешь:

import { ApiClient } from "./api-client"

const api = new ApiClient({
  baseUrl: "https://example.com/api",
  headers: { Authorization: "secret-token" },
})

await api.pet.getPetById(1) // → Pet

Посты в блоге

  1. apigen-ts – Simple TypeScript API Client Generator en