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ê?