DocumentX Logo
DocumentX.
Ctrl+K
TypeScript/Conceptos

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" });