Как сказал epascarello, атрибут type существует для целей проверки, поэтому, если вы введете текст в числовое поле и попытаетесь отправить форму, он вас не пропустит. Я не могу сказать вам, почему это не по умолчанию для ввода число , но совместимость с браузерами была проблемой с тех пор, как браузеры существовали.
Если вы хотите, чтобы пользователь фактически не мог ничего вводить, кроме цифр, вы можете сделать это в JavaScript.
const inputField = document.querySelector("input");
inputField.addEventListener("keypress", e => {
if (e.which > 31 && (e.which < 48 || e.which > 57)) {
e.preventDefault();
}
});