Inicio > Cursos > TypeScript > Clases en TypeScript
TypeScriptTypeScript BásicoLección 6 de 18

Clases en TypeScript

Las clases en TypeScript amplían las clases de JavaScript con características de orientación a objetos que JavaScript no tiene nativamente. Los modificadores de acceso controlan la visibilidad: public (accesible desde cualquier lugar, es el default), private (solo dentro de la misma clase), y protected (dentro de la clase y sus subclases). Esto permite encapsular la lógica interna y exponer solo la interfaz que otros deben usar.

Una característica exclusiva de TypeScript son los Parameter Properties: al poner public, private o readonly antes de un parámetro del constructor, TypeScript automáticamente crea y asigna la propiedad de la clase, ahorrando mucho código boilerplate. Las clases abstractas son como plantillas: definen qué métodos deben existir pero no los implementan, forzando a las subclases a hacerlo. No se pueden instanciar directamente, solo sirven como base para heredar.

interface Serializable {
  toJSON(): Record<string, unknown>;
}

class Cuenta implements Serializable {
  // Parameter properties — shorthand de declarar y asignar
  constructor(
    public readonly id: string,
    private saldo: number,
    protected titular: string,
  ) {}

  // Getter/Setter tipado
  get saldoActual(): number { return this.saldo; }
  set depositar(monto: number) {
    if (monto <= 0) throw new Error("Monto inválido");
    this.saldo += monto;
  }

  retirar(monto: number): void {
    if (monto > this.saldo) throw new Error("Saldo insuficiente");
    this.saldo -= monto;
  }

  toJSON() { return { id: this.id, titular: this.titular, saldo: this.saldo }; }

  static crear(titular: string): Cuenta {
    return new Cuenta(crypto.randomUUID(), 0, titular);
  }
}

// Clase abstracta — no se puede instanciar
abstract class Figura {
  abstract area(): number;
  abstract perimetro(): number;

  describir(): string {
    return `Área: ${this.area().toFixed(2)}, Perímetro: ${this.perimetro().toFixed(2)}`;
  }
}

class Circulo extends Figura {
  constructor(readonly radio: number) { super(); }
  area() { return Math.PI * this.radio ** 2; }
  perimetro() { return 2 * Math.PI * this.radio; }
}

// new Figura(); // Error: Cannot create an instance of abstract class
new Circulo(5).describir(); // OK
Consejo⚡ Los Parameter Properties (constructor(public nombre: string)) son un shorthand exclusivo de TypeScript. Declaran la propiedad Y la asignan en una sola línea, eliminando mucho boilerplate.
← Type Guards y NarrowingGenerics →

Practica esta lección

Resuelve los ejercicios del curso de TypeScript en la app, gratis y con corrección automática.

Empezar a practicar