Quindi, sto giocando con l'inferenza di tipo in TypeScript. Fornirò due esempi che producono gli stessi risultati quando invocato, tuttavia in uno di essi TypeScript non può inferire il tipo a causa di "Nessun miglior tipo comune".Tipo di inferenza con tipi di unione - Non esiste il miglior tipo comune
Esempio con operatore ternario
function foo(a: boolean) {
return a ? 4 : true;
}
Il compilatore deduce che foo è (a: boolean) => number | boolean
che è eccezionale.
Esempio con if
function foo(a: boolean) {
if (a) {
return 4;
} else {
return true;
}
}
Il compilatore si lamenta "No miglior tipo comune" quando si cerca di dedurre il tipo di ritorno. Mi confonde che se le affermazioni dovessero interferire con l'inferenza del tipo. Come mai?
Sì, so che l'annotazione di tipo aiuta qui. Quindi, qual è la logica dietro da una prospettiva di compilatore? – Peter
@Peter Non riesco a trovare da nessuna parte l'origine di questo, ma sono abbastanza sicuro che lo fa al fine di aiutare a prevenire gli errori. Di solito vuoi restituire un tipo comune da tutte le dichiarazioni di ritorno ... se non lo sei, il codice può diventare confuso. –