Eu tive um problema semelhante e atualizei o exemplo de input[type="number"] em documentos angulares para trabalhos com precisão de decimais e estou usando essa abordagem para resolvê-lo.
PS: Um lembrete rápido é que os navegadores suportam os caracteres ‘e’ e ‘E’ na input [type = “number”], porque o evento keypress é necessário.
Estendendo Adam Thomas resposta você pode facilmente tornar esta diretiva mais genérica, adicionando o argumento de input com regexp personalizado:
Por favor, confira o meu componente que irá ajudá-lo a permitir apenas um determinado tipo de dados. Atualmente suportando inteiro, decimal, string e hora (HH: MM).