interface Test { name: string; age: number; } const subjectObj = { name: "Harhsit Singh", age: 17, height: "6'1", }; const testObj: Test = subjectObj; //? NO ERROR const testObj2: Test = { name: "Harhsit Singh", age: 17, height: "6'1", //! ERROR }; Creé una interface test como se muestra en la imagen, y un sujeto de prueba llamado subjectObj y contiene más propiedades que las que contiene la test de tipo.
Ahora asigné mi subjectObj a la constante testObj de tipo test , luego declaré otra constante testObj2 con el mismo tipo test y le asigné el mismo objeto, pero esta vez lo inicialicé con un nuevo objeto de la misma estructura que subjectObj .
Pero ahora me da un error de que 'height' does not exist in type 'test' , pero no dio ningún error cuando pasé subjectObj como referencia a testObj aunque también contiene la propiedad height .
No sé por qué sucede esto, así que necesito una explicación detallada.
La verificación de propiedades en exceso ocurre solo cuando pasa literales de objetos: cuando pasa tipos, se encuentra con el hecho de que TS nunca verifica los tipos exactos y asume que un objeto con tipos en exceso es lo que quiere decir.
Eso se debe realmente a la cultura JS en la que TS está integrado. De lo contrario, sería muy difícil codificar en TS contra las interfaces JS.