Estoy tratando de pasar a mecanografiado con mi aplicación Node/Express. Anteriormente mi código era:
//app.js const error = new Error('Not Found'); error.status = 404;Cuando intento esto:
//app.ts const error = new Error('Not Found'); error.status = 404; // Property 'status' does not exist on type 'Error'.ts(2339) Entiendo de la documentación de developer.mozilla.org que el constructor de errores tiene los siguientes parámetros opcionales: message , options , nombre de fileName , número de lineNumber , así que supongo que status no debería permitirse. Creo que lo copié de un tutorial de YouTube, así que supongo que en realidad no es una buena práctica.
TypeScript no permite agregar propiedades desconocidas. Hay formas de definir objetos con claves arbitrarias (por ejemplo, Record ).
En este caso, podría crear su propia subclase para Error que incluye la propiedad de status .
class StatusError extends Error { status: number | undefined; } const e = new StatusError('Not found'); e.status = 404; También puede agregarlo al constructor, luego puede eliminar con confianza el undefined .
class StatusError extends Error { constructor(public status: number, message?: string) { super(message) } } const e = new StatusError(404, 'Not found');Encontré en la documentación de expressjs.com que hay una sección sobre "¿Cómo manejo las respuestas 404?", donde proporcionan este ejemplo:
app.use(function (req, res, next) { res.status(404).send("Sorry can't find that!") })Así que produje esto y detuvo el error:
import express, {NextFunction, Request, Response} from "express"; const app = express(); ... app.use((req: Request, res: Response, next: NextFunction) => { res.status(404).send("Sorry can't find that!"); }); export { app };