Constructor
Es un método especial que se ejecuta automáticamente al usar new. Permite declarar e inicializar propiedades, exigiendo los datos obligatorios al momento de instanciar la clase.
Sintaxis Básica
typescriptclass Usuario {
// El constructor exige el 'nombre' para poder crear el usuario
constructor(public nombre: string) {}
}
La Forma Tradicional (Explícita)
Declaras las propiedades arriba en la clase y dentro del constructor las asignas manualmente usando this. Es la sintaxis estándar de JavaScript/TypeScript.
typescriptclass Usuario {
nombre: string; // 1. Declaras la propiedad
constructor(nombre: string) { // 2. Recibes el parámetro
this.nombre = nombre; // 3. Asignas el valor manualmente
}
}
Constructor con Lógica Interna
Se usa cuando el constructor no solo recibe datos, sino que ejecuta código (validaciones, cálculos o inicialización de datos automáticos) en el instante en que el objeto nace.
typescriptclass Usuario {
fechaRegistro: Date;
constructor(public nombre: string) {
// Código extra que se ejecuta automáticamente al hacer 'new'
this.fechaRegistro = new Date();
console.log(`¡Usuario ${this.nombre} creado con éxito!`);
}
}
Constructor Privado (private)
Haces que el constructor sea privado para impedir que se use new Usuario() desde fuera de la clase. Es la base de patrones como el Singleton o clases de utilidad estática.
typescriptclass Usuario {
private constructor(public nombre: string) {}
// Solo la propia clase puede crear una instancia internamente
static crearUsuarioInvitado(): Usuario {
return new Usuario("Invitado");
}
}
// ❌ const u1 = new Usuario("Carlos"); Error: El constructor es privado
const u2 = Usuario.crearUsuarioInvitado(); // ✅ Correcto
Sobrecarga de Constructores
Permite crear instancias pasando diferentes tipos de parámetros mediante firmas de sobrecarga y una implementación única.
typescriptclass Usuario {
nombre: string;
// Firmas de sobrecarga
constructor(nombre: string);
constructor(datos: { nombre: string });
// Implementación única del constructor
constructor(parametro: any) {
if (typeof parametro === "string") {
this.nombre = parametro;
} else {
this.nombre = parametro.nombre;
}
}
}
// Ambas formas son válidas:
const u1 = new Usuario("Carlos");
const u2 = new Usuario({ nombre: "Carlos" });