The function itself has the following signature (taken from DefinitelyTyped):
export type ErrorRequestHandler = (err: any, req: Request, res: Response, next: NextFunction) => any;
So you can either declare the function as a variable of type ErrorRequestHandler
or type the parameters according to that definition.
Note: the typings for “express-serve-static-core” are imported and re-exported by the typings for “express”, which was where I looked for the above definition.
import type { ErrorRequestHandler } from "express";
const errorHandler: ErrorRequestHandler = (err, req, res, next) => {};
app.use(errorHandler);
Regarding your second question related to implicit any
, it is the “implicit” part that is causing the problem, If you explicitly type as any
then there won’t be any error (but there won’t be any typings either; consider using unknown
instead).
You can also disable noImplicitAny
in your compiler config but I wouldn’t recommend it personally, as it protects you from several classes of bugs.