Logo

Interfaces vs Clases en TypeScript: Cuándo y Cómo Usarlas

En TypeScript, tenemos dos formas principales de definir la estructura y comportamiento de nuestros objetos: interfaces y clases. Ambas tienen sus propias ventajas y situaciones en las que son más apropiadas. En este artículo, exploraremos las diferencias entre interfaces y clases, y cuándo y cómo utilizar cada una de ellas.

Interfaces

Las interfaces en TypeScript son una forma de definir la estructura de un objeto. Nos permiten describir las propiedades y métodos que un objeto debe tener sin proporcionar una implementación concreta. En otras palabras, las interfaces definen un contrato que los objetos deben cumplir.

Declaración de una interfaz

La declaración de una interfaz en TypeScript es bastante sencilla. Podemos utilizar la palabra clave interface seguida del nombre de la interfaz y las propiedades y métodos que queremos definir.

interface Persona {
  nombre: string;
  edad: number;
  saludar(): void;
}

En este ejemplo, hemos creado una interfaz llamada Persona que define las propiedades nombre y edad, y el método saludar(). Cualquier objeto que implemente esta interfaz deberá tener estas propiedades y métodos.

Implementación de una interfaz

Una vez que hemos definido una interfaz, podemos implementarla en una clase. La implementación de una interfaz en una clase se realiza utilizando la palabra clave implements.

class Estudiante implements Persona {
  nombre: string;
  edad: number;

  constructor(nombre: string, edad: number) {
    this.nombre = nombre;
    this.edad = edad;
  }

  saludar() {
    console.log(`Hola, mi nombre es ${this.nombre}`);
  }
}

En este ejemplo, la clase Estudiante implementa la interfaz Persona. Esto significa que la clase debe tener las propiedades nombre y edad, y el método saludar(). La implementación de la interfaz nos asegura que la clase cumple con el contrato definido por la interfaz.

Uso de interfaces

Las interfaces son especialmente útiles cuando queremos definir un contrato que varios objetos deben cumplir. Por ejemplo, si tenemos diferentes clases que representan diferentes tipos de animales, podemos definir una interfaz Animal que describa las propiedades y métodos comunes a todos los animales.

interface Animal {
  nombre: string;
  edad: number;
  hacerSonido(): void;
}

Luego, podemos implementar esta interfaz en las clases Perro, Gato y Pájaro, asegurando que todas estas clases tengan las propiedades y métodos definidos en la interfaz Animal.

class Perro implements Animal {
  nombre: string;
  edad: number;

  constructor(nombre: string, edad: number) {
    this.nombre = nombre;
    this.edad = edad;
  }

  hacerSonido() {
    console.log('Guau guau');
  }
}

class Gato implements Animal {
  nombre: string;
  edad: number;

  constructor(nombre: string, edad: number) {
    this.nombre = nombre;
    this.edad = edad;
  }

  hacerSonido() {
    console.log('Miau');
  }
}

class Pajaro implements Animal {
  nombre: string;
  edad: number;

  constructor(nombre: string, edad: number) {
    this.nombre = nombre;
    this.edad = edad;
  }

  hacerSonido() {
    console.log('Pío pío');
  }
}

Beneficios de las interfaces

Las interfaces tienen varios beneficios en TypeScript:

Clases

Las clases en TypeScript son una forma de definir objetos con propiedades y métodos. A diferencia de las interfaces, las clases pueden proporcionar una implementación concreta de los métodos y propiedades que definen.

Declaración de una clase

Para declarar una clase en TypeScript, utilizamos la palabra clave class seguida del nombre de la clase y las propiedades y métodos que queremos definir.

class Coche {
  marca: string;
  modelo: string;
  año: number;

  constructor(marca: string, modelo: string, año: number) {
    this.marca = marca;
    this.modelo = modelo;
    this.año = año;
  }

  acelerar() {
    console.log('El coche está acelerando');
  }
}

En este ejemplo, hemos declarado una clase Coche con las propiedades marca, modelo y año, y el método acelerar(). La clase también tiene un constructor que se utiliza para inicializar las propiedades cuando se crea un nuevo objeto de la clase.

Uso de clases

Las clases son útiles cuando queremos crear objetos con propiedades y métodos concretos. Podemos crear instancias de una clase utilizando la palabra clave new.

const miCoche = new Coche('Toyota', 'Corolla', 2022);
miCoche.acelerar();

En este ejemplo, hemos creado una instancia de la clase Coche llamada miCoche y luego hemos llamado al método acelerar() en esa instancia.

Beneficios de las clases

Las clases tienen varios beneficios en TypeScript:

¿Cuándo usar interfaces y cuándo usar clases?

La elección entre interfaces y clases depende del contexto y de lo que queremos lograr. Aquí hay algunas pautas generales:

En muchos casos, es posible utilizar tanto interfaces como clases en TypeScript. Por ejemplo, podemos utilizar una interfaz para definir la estructura de un objeto y luego implementarla en una clase para proporcionar una implementación concreta de los métodos y propiedades.

© Copyright 2024, todos los derechos reservados.