DocumentX Logo
DocumentX.
Ctrl+K
TypeScript/Conceptos

Instanciación de Clases

Proceso de creación de objetos reales en memoria a partir de una clase utilizando la palabra clave new.

Instanciación de Clases

Instanciar una clase significa crear un objeto real en memoria a partir del molde o plantilla que definiste en la clase. Para instanciar en TypeScript (y JavaScript) se utiliza la palabra clave new.


1. Sintaxis Básica de Instanciación

La regla siempre es utilizar la palabra clave new seguida del nombre de la clase y sus argumentos:

typescriptconst miObjeto = new NombreDeLaClase(argumentosDelConstructor);

Ejemplo Paso a Paso

typescriptclass Usuario {
  constructor(
    public nombre: string,
    public email: string
  ) {}

  public saludar(): void {
    console.log(`Hola, soy ${this.nombre}`);
  }
}

// 1. INSTANCIACIÓN: Se ejecuta el 'constructor' de la clase
const usuario1 = new Usuario("Carlos", "carlos@gmail.com");
const usuario2 = new Usuario("Ana", "ana@gmail.com");

// 2. USO DE LAS INSTANCIAS:
usuario1.saludar(); // Imprime: "Hola, soy Carlos"
usuario2.saludar(); // Imprime: "Hola, soy Ana"

2. Formas de Instanciar Según el Constructor

A. Sin argumentos en el constructor

Si la clase no solicita parámetros para inicializarse, se utilizan paréntesis vacíos ().

typescriptclass Calculadora {
  sumar(a: number, b: number): number {
    return a + b;
  }
}

// Instanciación sin parámetros:
const calc = new Calculadora();

B. Con parámetros obligatorios

Si el constructor exige variables, TypeScript requiere que se envíen en el orden definido.

typescriptclass Producto {
  constructor(public titulo: string, public precio: number) {}
}

// ❌ ERROR: Falta el precio
// const p1 = new Producto("Laptop");

// ✅ CORRECTO:
const p2 = new Producto("Laptop", 1200);

C. Con parámetros opcionales o valores por defecto

Si el constructor contiene parámetros opcionales (?) o con valor por defecto (=), se pueden omitir al instanciar.

typescriptclass Configuracion {
  constructor(
    public tema: string = "oscuro", // Valor por defecto
    public idioma?: string          // Opcional
  ) {}
}

const c1 = new Configuracion();                   // tema="oscuro", idioma=undefined
const c2 = new Configuracion("claro");           // tema="claro", idioma=undefined
const c3 = new Configuracion("claro", "español"); // tema="claro", idioma="español"

D. Instanciación pasando un Objeto de Opciones

Ideal para clases con múltiples parámetros, permitiendo un orden flexible y una llamada más clara.

typescriptinterface UsuarioOptions {
  nombre: string;
  edad: number;
  esAdmin?: boolean;
}

class Usuario {
  public nombre: string;
  public edad: number;
  public esAdmin: boolean;

  constructor(opciones: UsuarioOptions) {
    this.nombre = opciones.nombre;
    this.edad = opciones.edad;
    this.esAdmin = opciones.esAdmin ?? false;
  }
}

// Instanciación limpia pasando un objeto:
const u = new Usuario({
  nombre: "Carlos",
  edad: 28,
  esAdmin: true
});

3. Casos Restringidos para new

Clases Abstractas (abstract class)

No pueden ser instanciadas directamente; solo sirven como base para clases hijas.

typescriptabstract class Animal {}

// ❌ ERROR: No se puede crear una instancia de una clase abstracta.
// const a = new Animal(); 

Constructores Privados (private constructor)

Restringen la instanciación directa externa, común en patrones como Singleton.

typescriptclass Database {
  private constructor() {} // Nadie afuera puede hacer 'new'
}

// ❌ ERROR: El constructor es privado.
// const db = new Database();