1.0.3 ā€¢ Published 7 months ago

express-openapi-typescript v1.0.3

Weekly downloads
-
License
ISC
Repository
-
Last release
7 months ago

šŸ‘Œ express-openapi-typescript

Utilities for adding types to express routes according to an OpenAPI specification.

Install

npm install express-openapi-typescript openapi-typescript

Usage

Generate types

Use openapi-typescript to generate the types file containing the paths interface:

npx openapi-typescript ./path/to/my/schema.yaml -o ./path/to/my/schema.d.ts

āš ļø Note: Only "application/json" content types are supported currently.

Typed router

The recommended method is wrapping an express Router with an OpenApiRouter. The delete, get, patch, post, and put methods will be typed according to the fully qualified (openapi) route that is passed in as a type parameter:

import express, { json, Router } from "express";
import { OpenApiRouter } from "express-openapi-typescript";

import { paths } from "./path/to/my/schema.d.ts";

const app = express();

app.use(json());

const router = OpenApiRouter<paths>(Router());

// Route corresponding to 'POST /pet' path in openapi spec
router.post<"/pet">("/", (req, res) => {
  // req.body, req.query, req.params, and res.json() are fully typed
  res.json({
    name: req.body.name,
    photoUrls: req.body.photoUrls,
  });
});

// The original Router() instance is stored in `router` property
app.use("/pet", router.router);

Note that the express route is relative to the router, and so may not be the exact same as the router.

Typed request handlers

The same functionality can be acheived without extending the router, which may be required in some use cases, by casting the request handler functions themselves:

import express, { json, Router } from "express";
import {
  DeleteHandler,
  GetHandler,
  PatchHandler,
  PostHandler,
  PutHandler,
} from "express-openapi-typescript";

import { paths } from "./path/to/my/schema.d.ts";

const app = express();

app.use(json());

const router = Router();

router.post("/", ((req, res) => {
  // req.body, req.query, req.params, and res.json() are fully typed
  res.json({
    name: req.body.name,
    photoUrls: req.body.photoUrls,
  });
  // Route corresponding to 'POST /pet' path in openapi spec
}) as PostHandler<paths, "/pet">);

app.use("/pet", router);
1.0.3

7 months ago

1.0.2

7 months ago

1.0.1

7 months ago

1.0.0

7 months ago