es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cuál será el tipo de objeto de clase donde la clase implementa una interfaz y también tiene sus propios miembros nuevos?

Soy nuevo en OOP y typescript, así que aquí está el código de muestra:

interface Company{
 compName:string;
 compId: number;
 compAdree:string;
}

class Employee implements Company{
 compName="fb";
 compId=83487;
 compAdree="NY";
 emp_name="peter";
 emp_id=99348493;
 emp_adr="Ny";
}

En el código anterior, la clase Employee está implementando la interfaz Company. La clase tiene algunos miembros nuevos que no están en la interfaz, así que si creo un objeto de la clase Employee, ¿cuál será el tipo del objeto?

He encontrado algunos códigos donde el tipo es la clase y en otros el tipo es la interfaz. Así que estoy confundido sobre cuál usar.

¿Será?

let emp:Employee = new Employee()

o será

let emp:Company = new Employee()
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El tipo del objeto depende del contexto y lo que desees hacer con él.

    Si deseas acceder a las propiedades y métodos de la clase Employee, entonces debes utilizar el tipo Employee:

    let emp: Employee = new Employee();
    

    Esto te permitirá acceder a las propiedades emp_name, emp_id y emp_adr de la clase Employee.

    Si deseas tratar el objeto como un objeto de la compañía (Company) y solo acceder a las propiedades que están en la interfaz Company, entonces debes utilizar el tipo Company:

    let emp: Company = new Employee();
    

    Esto solo te permitirá acceder a las propiedades compName, compId y compAdree del objeto.

    En general, es buena práctica utilizar el tipo más específico posible para tener acceso a todas las propiedades y métodos del objeto. Pero si deseas imponer algunas restricciones o garantizar la compatibilidad con otras partes del código, entonces utilizar un tipo más general (como la interfaz) puede ser útil.

Comments are closed.