Interfaz vs. Clase en TypeScript

Shuvayan Ghosh Dastidar 30 enero 2023
  1. Diferencias entre clases e interfaces en TypeScript
  2. Cuándo usar clases frente a interfaces en TypeScript
Interfaz vs. Clase en TypeScript

TypeScript es un lenguaje fuertemente tipado y admite tipos complejos y primitivos. Es un superconjunto del lenguaje de programación JavaScript y, como resultado, también tiene las diferentes características presentes en JavaScript, como los conceptos de programación orientada a objetos (POO) y los conceptos de programación funcional.

TypeScript se vuelve extremadamente útil para las organizaciones que tienen grandes bases de código. TypeScript ayuda a evitar errores de tiempo de ejecución que serían inevitables en el caso de JavaScript para tipos inferidos incorrectamente.

Las herramientas adecuadas y el IDE compatible con TypeScript pueden sugerir la finalización del código, detectar errores en los tipos, corregir errores automáticamente y más a través de varias interfaces definidas por el usuario o por tipos inferidos por el compilador de TypeScript.

Este tutorial se centrará en las diferencias entre clases e interfaces y demostrará cuándo usar cuál para modelar algunos datos.

Diferencias entre clases e interfaces en TypeScript

Las clases son esencialmente necesarias para contener la implementación de diferentes objetos con diferentes propiedades y métodos asociados con ellos. Las clases pueden tener propiedades inicializadas y tener implementaciones de varios métodos dentro de ellas y pueden usarse para inicializar o crear diferentes objetos.

Las interfaces solo se utilizan para contener la información de tipo de varios atributos correspondientes a un objeto. Generalmente se usa para la verificación de tipos y, por lo tanto, para evitar errores de tiempo de ejecución y no se puede usar para la creación de instancias de objetos.

class Animal {
    name : string;
    eyes : number;

    constructor( name : string, eyes : number) {
        this.name = name;
        this.eyes = eyes;
    }

    getName() : string {
        return this.name;
    }

    getEyes() : number {
        return this.eyes;
    }
}

El bloque de código anterior muestra la implementación de una clase TypeScript que contiene el modelo de los diferentes atributos asociados con la clase Animal y tiene algunos métodos. Los mismos datos se pueden modelar utilizando una interfaz.

interface Animal {
    name : string;
    eyes : number;

    getName : () => string;
    getEyes : () => number;
}

Por lo tanto, de acuerdo con la interfaz, tiene todas las posibilidades de verificación de tipos en cualquier objeto que implemente la interfaz, pero a diferencia de las clases, no tiene forma de inicializar las propiedades de una clase y no puede tener ninguna implementación para las funciones en una clase.

Cuándo usar clases frente a interfaces en TypeScript

Las clases se utilizan como un modelo de objeto que contiene valores predeterminados, diferentes implementaciones de métodos o al usar la palabra clave new para crear diferentes instancias de la misma clase. Además, con las clases, el código ocupará espacio en tiempo de ejecución, a diferencia de las interfaces eliminadas por el compilador de TypeScript.

Las clases tienen constructores para agregar código de inicialización e inicializar variables de datos en la clase, a diferencia de las interfaces.

Por lo tanto, las clases se utilizan para representar algunos modelos de datos complejos cuyos objetos pueden necesitar ser creados y, a menudo, deben ampliarse y puede requerirse que tengan una lógica de inicialización adjunta.

Mientras tanto, las interfaces se utilizan para tener un modelado de datos simple, que consiste solo en los tipos de atributos asociados con un objeto.

También pueden actuar como interfaz de datos de algunas clases, digamos clase Tiger implementa Animal: la clase Tiger tendrá todo el soporte de verificación de tipos con los mismos atributos que están presentes en la interfaz Animal.

Shuvayan Ghosh Dastidar avatar Shuvayan Ghosh Dastidar avatar

Shuvayan is a professional software developer with an avid interest in all kinds of technology and programming languages. He loves all kinds of problem solving and writing about his experiences.

LinkedIn Website

Artículo relacionado - TypeScript Class

Artículo relacionado - TypeScript Interface