Existe algum motivo específico para colocarmos cada operator dentro de um pipe e não usar o mesmo pipe com os operators encadeados dessa forma:
.pipe(
debounceTime(300),
switchMap(username =>
this.signUpService.checkUserNameTaken(username)
),
map(isTaken => isTaken ? {userNameTaken: true} : null),
first()
)