Avatar ·

Determinación del tipo de objeto al crear un literal en TypeScript

¡Hola a todos! Empecé a estudiar TypeScript recientemente y me encontré con un problema que me parece extraño. Cuando creo un objeto usando un literal, quiero especificar explícitamente su tipo, pero no entiendo cómo hacerlo correctamente. Aquí hay un ejemplo: tengo una interface `User`, y quiero crear un objeto `user` con este tipo. Probé varias formas, pero no estoy seguro de cuál es la correcta y cuál es la diferencia. ```typescript interface User { name: string; age: number; } // Forma 1: type annotation después de la declaración const user1: User = { name: 'Alexey', age: 30 }; // Forma 2: type assertion const user2 = { name: 'María', age: 25 } as User; // Forma 3: sin tipo const user3 = { name: 'Iván', age: 35 }; ``` Preguntas: 1. ¿Cuál es la diferencia entre estos enfoques? 2. ¿Cuál de ellos es preferible? 3. ¿Por qué TypeScript en algunos casos permite agregar propiedades adicionales, y en otros no? Me confunde especialmente la situación cuando quiero pasar un objeto a una función, que