Los namespaces en TypeScript son una forma de agrupar código en módulos lógicos, lo que permite organizar mejor las funciones, clases e interfaces dentro de un proyecto. Ayudan a evitar conflictos de nombres cuando se trabaja con múltiples componentes que podrían tener el mismo identificador.
Aunque los namespaces eran muy utilizados en versiones anteriores, hoy en día se recomienda usar módulos ES6. Sin embargo, siguen siendo útiles para ciertos casos, como aplicaciones de gran escala o cuando no se pueden usar módulos.
namespace MiEspacioDeNombres {
export class Persona {
constructor(public nombre: string) {}
}
}
El uso de la palabra clave export
es crucial para hacer que los componentes dentro del namespace sean accesibles desde fuera de este.
namespace Utilidades {
export function saludo(nombre: string) {
return `Hola, ${nombre}!`;
}
}
console.log(Utilidades.saludo("Carlos")); // Resultado: Hola, Carlos!
En este ejemplo, la función saludo
se encapsula dentro del namespace Utilidades
, evitando colisiones con otras funciones de igual nombre fuera del namespace.
Un namespace puede contener múltiples clases y funciones relacionadas, agrupándolas de manera lógica.
namespace Geometria {
export class Rectangulo {
constructor(public ancho: number, public alto: number) {}
area(): number {
return this.ancho * this.alto;
}
}
export function calcularPerimetro(ancho: number, alto: number): number {
return 2 * (ancho + alto);
}
}
const rect = new Geometria.Rectangulo(10, 5);
console.log(rect.area()); // Resultado: 50
console.log(Geometria.calcularPerimetro(10, 5)); // Resultado: 30
Puedes anidar namespaces para crear una estructura jerárquica y organizar mejor tu código.
namespace MiApp {
export namespace Utilidades {
export function convertirMayusculas(texto: string): string {
return texto.toUpperCase();
}
}
export namespace Validaciones {
export function esNumero(valor: any): boolean {
return !isNaN(valor);
}
}
}
console.log(MiApp.Utilidades.convertirMayusculas("hola")); // Resultado: HOLA
console.log(MiApp.Validaciones.esNumero(123)); // Resultado: true
Puedes crear alias de namespaces para evitar escribir nombres largos repetidamente.
namespace Utilidades {
export function sumar(a: number, b: number): number {
return a + b;
}
}
import U = Utilidades;
console.log(U.sumar(2, 3)); // Resultado: 5
Para más información sobre el uso de namespaces, consulta la documentación oficial de TypeScript.
Jorge García
Fullstack developer