Pois bem, você está seguindo o guia e não percebeu que tá usando Angular 8 até ser tarde demais: o ViewChild nesta versão pede um segundo argumento, no caso, seria {static: false}. Ficaria assim esta variável:
@ViewChild('userNameInput', {static: false}) userNameInput: ElementRef<HTMLInputElement>;
Espero que isso ajude alguém no futuro.