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
Practica esta lección
Resuelve los ejercicios del curso de TypeScript en la app, gratis y con corrección automática.
Empezar a practicar