Проблема
Ваша первоначальная подпись не проходит проверку компилятора, потому что функция end
имеет такую перегрузку:
end(cb?: () => void): void;
end(chunk: any, cb?: () => void): void;
end(chunk: any, encoding: string, cb?: () => void): void;
Компилятор предупреждает вас, что во время выполнения вынеобходимо проверить, какая из перегрузок используется.
Решение
Вот подпись, которая является типобезопасной.Он проверяет, какой из трех аргументов является обратным вызовом, а затем действует соответственно.
import { Response } from 'express';
const handler = (req: Request, res: Response) => {
res.end = (arg1: Function | any, arg2?: Function | string, arg3?: Function) => {
if (typeof arg1 === 'function') {
// end(cb?: () => void): void;
}
if (typeof arg2 === 'function') {
// end(chunk: any, cb?: () => void): void;
}
if (typeof arg3 === 'function') {
// end(chunk: any, encoding: string, cb?: () => void): void;
}
}
};