Skip to content
openapi-typescript

openapi-typescriptは、OpenAPI 3.0 & 3.1 スキーマをNode.jsを使用して素早くTypeScriptに変換します。Java/node-gyp/OpenAPIサーバーの実行は不要です。

このコードはMITライセンスで保護されており、無料で利用可能です。

TIP

OpenAPI初心者ですか?Speakeasyの Intro to OpenAPI は、初心者にも分かりやすいガイドで、OpenAPIの「なぜ」と「どのように」を説明しています。

特徴

  • ✅ OpenAPI 3.0および3.1をサポート(discriminatorsのような高度な機能を含む)
  • ✅ 従来のコード生成より優れている実行時に依存しない型を生成
  • ✅ YAMLまたはJSONから、ローカルまたはリモートでスキーマを読み込む
  • ✅ 巨大なスキーマであってもミリ秒単位で型を生成

注: OpenAPI 2.xはバージョン 5.x およびそれ以前でサポートされています

使用例

👀 使用例を見る

セットアップ

このライブラリを使用するには、最新バージョンの Node.js がインストールされている必要があります(20.x 以上を推奨)。インストールしたら、以下のコマンドをプロジェクトで実行してください:

bash
npm i -D openapi-typescript typescript

次に、tsconfig.json ファイルに以下を追加して、型を正しく読み込めるようにします:

json
{
  "compilerOptions": {
    "module": "ESNext", // または "NodeNext"
    "moduleResolution": "Bundler" // または "NodeNext"
  }
}

強く推奨

さらに、以下の設定を追加すると型の安全性が向上します:

json
{
  "compilerOptions": {
    "noUncheckedIndexedAccess": true
  }
}

基本的な使い方

まず、npx openapi-typescript を実行してローカルの型ファイルを生成します。最初に入力スキーマ(JSON または YAML)を指定し、保存する場所を --output-o)で指定します:

bash
# ローカルスキーマ
npx openapi-typescript ./path/to/my/schema.yaml -o ./path/to/my/schema.d.ts
# 🚀 ./path/to/my/schema.yaml -> ./path/to/my/schema.d.ts [7ms]

# リモートスキーマ
npx openapi-typescript https://myapi.dev/api/v1/openapi.yaml -o ./path/to/my/schema.d.ts
# 🚀 https://myapi.dev/api/v1/openapi.yaml -> ./path/to/my/schema.d.ts [250ms]

次に、TypeScript プロジェクトで必要に応じて型をインポートします:

ts
import type { paths, components } from "./my-openapi-3-schema"; // openapi-typescript によって生成

// スキーマオブジェクト
type MyType = components["schemas"]["MyType"];

// パスパラメータ
type EndpointParams = paths["/my/endpoint"]["parameters"];

// レスポンスオブジェクト
type SuccessResponse =
  paths["/my/endpoint"]["get"]["responses"][200]["content"]["application/json"]["schema"];
type ErrorResponse =
  paths["/my/endpoint"]["get"]["responses"][500]["content"]["application/json"]["schema"];

ここから、これらの型を以下の用途で使用できます(ただし、これに限定されません):

  • OpenAPI対応のfetchクライアントを使用する(例:openapi-fetch
  • 他のAPIリクエストボディやレスポンスの型のアサート
  • API型に基づいたコアビジネスロジックの構築
  • モックテストデータが現在のスキーマと一致していることを確認する
  • 任意のnpmパッケージ(クライアントSDKなど)にAPI型をパッケージ化する