По моему мнению, я предлагаю вам сделать что-то вроде этого:
Я предполагаю, что Result.valid и Result.error оба являются статическими помощниками для преобразования ответа API в расходуемый объект над вашим приложением.
httpSource$.pipe(
tap(() => this.logger.debug(...)),
map(result => {
if(result.code === 0) {
return Result.valid(result.value);
}
else {
Result.error(result.message, result.value);
}
}),
catchError(e => of(Result.error<FunReturnType>>(e.message)))
);
это решит ваш двойной вызов и будет более читабельным для следующего разработчика, я думаю.