Inferência de tipo com tipos de união - Não existe o melhor tipo comum

Então, eu estou brincando com inferência de tipo no TypeScript. Fornecerei dois exemplos que produzem os mesmos resultados quando invocados, mas em um deles o TypeScript não pode inferir o tipo devido a "Nenhum melhor tipo comum".

Exemplo com operador ternário

function foo(a: boolean) {
    return a ? 4 : true;
}

O compilador deduz que foo é(a: boolean) => number | boolean o que é incrível.

Exemplo com instrução if

function foo(a: boolean) {
    if (a) {
        return 4;
    } else {
        return true;
    }
}

O compilador reclama sobre "Não há melhor tipo comum" ao tentar inferir o tipo de retorno. Me confunde que as declarações if mexam com a inferência de tipo. Por quê?

questionAnswers(1)

yourAnswerToTheQuestion