Entonces, si estoy usando node js con javascript, solía detectar errores agregando el siguiente código en mi archivo de inicio app.js:
app.use((req, res, next) => { next(createError.NotFound()); }); app.use((err, req, res, next) => { res.status(err.status || 500).json({ status: err.status || 500, success: 0, message: 'Error', error: [err.message], data: {} }); });el "err" se detectará automáticamente y devolverá, por ejemplo, 404 si estoy usando una ruta que no existe o 500 si la conexión a la base de datos no se establece correctamente y así sucesivamente.
Pero en mecanografiado, ¿cómo puedo hacer la misma lógica?
Mi archivo app.ts es el siguiente
import express, { Application, Request, Response, NextFunction } from 'express'; import routes from './start/routes'; const app: Application = express(); app.use('/', require('./routes/api.route')); app.use(express.json()); app.use('/api', routes); app.use((err, req: Request, res: Response, next: NextFunction ) => { res.status(err.status || 500).json({ status: err.status || 500, success: 0, message: 'Error', error: [err.message], data: {} }); }); const PORT = process.env.PORT || 3001; app.listen(PORT, () => console.log(`🚀 @ http://localhost:${PORT}`));esto no es compilar. Dice que err.status y err.message no se encuentran. ¿Qué hacer?
Falta el tipo del parámetro err , que debería ser any según el tipo ErrorRequestHandler . 
Esto hará que su código se compile y el controlador se ejecutará automáticamente cuando ocurra un error.
Sin embargo, para hacer una respuesta predeterminada a 404. Deberá agregar otro controlador ya que no es un error.
app.use((req: Request, res: Response, next: NextFunction ) => { // Handle not found })NOTA Este controlador debe ser el último ya que acepta todas las solicitudes.