Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Fastify Typescript: body unknown

This is my first time using Fastify and I'm facing an issue trying to access to the values in the body in Typescript.

Any idea or suggestion? Thanks!

Update: I would like to avoid to use app.get(...) etc to simplify the code

This is my code:

App.ts

const buildServer = (options = {}) => {
  const app = fastify(options);
  app.register(routesApiV1, { prefix: '/api'});
  return app;
}

Routes.ts

const routesApiV1: FastifyPluginCallback = (fastify, options, done) => {
  fastify.route(userRoute);
  done();
}

User.ts

const handler: RouteHandlerMethod = async (req, res) => {
  const {
    name,
    lastName,
    dateOfBirth,
    addressLine,
    zipCode,
    city,
    country
  } = req.body; // Property '...' does not exist on type 'unknown'
  
  ...
}

const route: RouteOptions = {
  method: 'GET',
  url: '/user/:id',
  // schema: fastifySchema, Tried but not working
  handler,
  preValidation,
}
like image 501
Alejandro Acevedo Avatar asked Jun 25 '26 20:06

Alejandro Acevedo


1 Answers

The FastifyRequest type is a generic type. You should pass it your body type...

import type { FastifyRequest } from 'fastify'

interface BodyType {
  name: string
}

const handler = async (req: FastifyRequest<{ Body: BodyType }>) => {
    const { name } = req.body
}

When you use RouteHandlerMethod, it defaults to typing the request object as FastifyRequest<{ Body: unknown }>, hence the type of body being unknown

like image 148
Charlie Martin Avatar answered Jun 28 '26 11:06

Charlie Martin



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!