'how to strongly type body of NextApiRequest in Nextjs [duplicate]
wondering how to define the type of body of an API POST Nextjs route in order to benefit from typesafety ? In the NextApiRequest, body is defined as "any" and NextApiRequest is not generic
using as force the type but this is not clean at all
running NextJs12 and typescript 4.4.4
import { NextApiRequest, NextApiResponse } from "next";
interface IBody {
  test: string;
  value: number;
}
const handler = async (
  req: NextApiRequest, <-- whish to have something here like NextApiRequest<TQuery, TBody,..>
  res: NextApiResponse
): Promise<void> => {
  const { body } = req;
  console.log(body as IBody); <--this is not safe at all
  res.status(200).json({ text: "Hello" });
};
export default handler;
Solution 1:[1]
You can use TypeScript Omit to replace the body of the request with a custom type.
type Override<T1, T2> = Omit<T1, keyof T2> & T2;
    
export type MyCustomRequest = Override<NextApiRequest, { body: MyCustomRequestBody }>
    
export type MyCustomRequestBody = {
  myCustomField: string
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source | 
|---|---|
| Solution 1 | Peter Edmonds | 
