Interceptors via catchError() remap exceptions between types before filters run — used to translate domain errors into HTTP exceptions. Exception filters shape the HTTP error response sent to the client. Interceptors fix the type of exception; filters fix the format of the response.
Interceptors (catchError) — translate exception types: EntityNotFoundError → NotFoundException.
Exception filters — format the HTTP response: shape JSON body, set headers, log errors.
Interceptors run before filters in the pipeline — remap first, then format.
Use interceptors when the error type needs changing; use filters when only the response format needs changing.
Always re-throw from interceptor catchError if the error is not handled — let the filter catch it.