Подскажите пожалуйста, стоит ли явно определять тип переменной или нет?
В большинстве случаев нет, лучше доверится выводу типов, он сделает это лучше.
const a: number = 10;
Есть ли вообще какие то отличия?
есть, так как ts знает, что const нельзя переприсвоить, а числа неизменяемый тип, он выведет тут литеральный тип 10, который без проблем можно передать как в number так и в union из литеральных типов содержащий в себе 10
Но надо понимать, что вывод типов работает только сверху вниз, и из-за этого есть случаи, когда без явной декларации не обойтись, например:
// где-то есть
type SomeObject = { /* ... */ };
function getSomeObject(): SomeObject { /* ... */ }
// без явной декларации будет выведен тип null
let v: SomeObject | null = null;
setTimeout(() => {
// без явной декларации типа для v здесь будет ошибка
v = getSomeObject();
});