Первый выпуск:
Number.isNaN(+params['userId'])
Возвращает строку, а не число.
Второй выпуск:
const getAppUserId = userId.pipe(
switchMap((params: Params) => {
Вы получаете не параметры из наблюдаемого, а идентификатор пользователя (ну, на самом деле, логическое).
Если вы хотите "получить идентификатор параметра из / через наблюдаемый объект и после этого использовать его для: getAppUserId с switchMap, чтобы сделать HTTP-вызов с идентификатором параметра, который я получил из snapshot.params"
Тогда правильный код будет
this.activatedRoute.params.pipe(
map(params => params.id),
switchMap(userId => this.myAppService.getApplicationUser(userId)
);
Вы не должны проверять правильность идентификатора: URL-адреса являются строками, вы не можете доверять пользователю. Просто сделайте запрос, и если идентификатор ничего не соответствует, то ваш API ничего не вернет. Пусть API контролирует все идентификаторы, а не ваш клиент.