import fastify from 'fastify'; const app = fastify({ logger: true }); interface User { id: number; name: string; email: string; age: number; } app.post<{ Body: User; }> ('/api/users', async (request, reply) => { const user = request.body; const canDrink = user.age >= 21; const greeting = `Hello ${user.name.toUpperCase()}, your email ${user.email.toLowerCase()} has been recorded`; return { user, canDrink, greeting }; }); const start = async () => { try { await app.listen({ port: 3000 }); console.log('Server running at http://localhost:3000'); } catch (err) { app.log.error(err); process.exit(1); } }; start(); /* Try making a POST request with this "deranged" JSON: { "id": "42", "name": 12345, "email": {"address": "bad@example.com"}, "age": "twenty-one" } What happens: 1. TypeScript is happy at compile time (we said body is User) 2. Fastify accepts this JSON as valid (no runtime validation) 3. Code fails when trying operations like toUpperCase() on a number or comparing "twenty-one" >= 21 */