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();