Programming TypeScript Narrowing: come migliorare la gestione dei tipi con Type Guards e Conditional Types Come sfruttare i Type Guard e i Conditional Types per semplificare il codice e migliorare la manutenibilità in TypeScript