Saltar al contenido principal
eLearner.app
Módulo 4 · Lección 1 de 27/14 en el curso~15 min
Lecciones del módulo (1/2)

Clases y Modificadores

TypeScript extiende las clases estándar de ES6 con potentes características del paradigma orientado a objetos (OOP), como el tipado estático, los modificadores de acceso y las propiedades abreviadas.


Clases y Modificadores de Acceso

En TypeScript, puedes controlar la visibilidad de miembros, propiedades y métodos usando tres palabras clave principales:

  • public (por defecto): el miembro es accesible desde cualquier lugar.
  • private: el miembro es accesible solo dentro de la clase que lo define.
  • protected: el miembro es accesible dentro de la clase y de sus subclases (herencia).
TS
class Animal {
  public name: string;
  private age: number;

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

  public getAge(): number {
    return this.age;
  }
}

Propiedades Paramétricas (Parameter Properties)

TypeScript ofrece una sintaxis abreviada para declarar e inicializar miembros de una clase directamente en el constructor. Al agregar un modificador de acceso antes del parámetro del constructor, la propiedad se crea y se asigna automáticamente:

TS
// ¡Esta sintaxis hace exactamente lo mismo que el ejemplo anterior!
class Animal {
  constructor(
    public name: string,
    private age: number,
  ) {}
}

Implementación de Interfaces

Una clase puede implementar una o más interfaces usando la palabra clave implements. Esto garantiza que la clase respete un contrato específico al definir todos los métodos y propiedades requeridos:

TS
interface Flyable {
  fly(altitude: number): void;
}

class Bird implements Flyable {
  constructor(public name: string) {}

  fly(altitude: number): void {
    console.log(`${this.name} sta volando a ${altitude} metri.`);
  }
}

Herencia y super

TypeScript admite plenamente la herencia de clases. Una clase puede extender otra clase usando la palabra clave extends. Si la subclase define un constructor, este debe invocar al constructor de la clase base usando la función super() antes de poder acceder a this:

TS
class Person {
  constructor(public name: string) {}
}

class Student extends Person {
  constructor(
    name: string,
    public grade: number,
  ) {
    super(name); // Chiama il costruttore di Person
  }
}

Pruébalo tú

Ejercicio 1: Clase Car y Modificador Private

Ejercicio#ts.m4.l1.e1
Intentos: 0Cargando...

Declara una clase llamada Car. Debe tener una propiedad readonly model (cadena) definida en el constructor, una propiedad privada mileage (número) inicializada en 0, un método público drive(miles: number): void que incremente mileage en miles, y un getter o método getMileage(): number que devuelva mileage.

Cargando editor...
Mostrar pista

Usa private mileage: number = 0; para hacer la variable privada, y constructor(public readonly model: string) {} como abreviación.

Solución disponible después de 3 intentos

Ejercicio 2: Interfaz Shape y Clase Circle

Ejercicio#ts.m4.l1.e2
Intentos: 0Cargando...

Completa el código implementando la clase Circle que implemente la interfaz Shape. La clase debe tener una propiedad readonly radius (número) establecida mediante constructor, e implementar getArea(): number (devolviendo Math.PI * radius * radius).

Cargando editor...
Mostrar pista

Usa implements Shape en la clase Circle y define el método getArea(): number.

Solución disponible después de 3 intentos

Ejercicio 3: Clase Abstracta Vehicle y Subclase Motorcycle

Ejercicio#ts.m4.l1.e3
Intentos: 0Cargando...

Declara una clase llamada Motorcycle que extienda la clase abstracta Vehicle. Debe implementar el método start() para devolver la cadena 'Motorcycle ' seguida de la marca (this.make) y de ' started'.

Cargando editor...
Mostrar pista

Usa class Motorcycle extends Vehicle e implementa el método start(): string que devuelva la cadena correcta.

Solución disponible después de 3 intentos

Ejercicio 4: Parameter Properties y Herencia

Ejercicio#ts.m4.l1.e4
Intentos: 0Cargando...

Crea una clase llamada Employee que defina una propiedad de solo lectura id (número) y una propiedad pública name (cadena) mediante atajo en el constructor. Después de eso, crea una clase Developer que extienda Employee y agregue una propiedad pública department (cadena) mediante constructor.

Cargando editor...
Mostrar pista

Usa super(id, name) en el constructor de Developer y usa public department para definir la propiedad mediante el constructor.

Solución disponible después de 3 intentos