Namespaces y Módulos

TypeScript
TypeScript
Actualizado: 30/06/2025

¡Desbloquea el curso completo!

IA
Ejercicios
Certificado
Entrar

Namespaces y Módulos en TypeScript

La organización del código es fundamental en cualquier aplicación de software profesional. TypeScript ofrece dos mecanismos principales para estructurar y organizar el código: los namespaces y los módulos. Estos sistemas permiten agrupar funcionalidades relacionadas, evitar conflictos de nombres y crear arquitecturas escalables.

Namespaces: Organización Interna

Los namespaces proporcionan una forma de agrupar código relacionado bajo un nombre común, creando un contenedor lógico que evita la contaminación del espacio de nombres global. Esta característica resulta especialmente útil cuando trabajamos con bibliotecas internas o queremos organizar funcionalidades específicas.

namespace Geometria {
    export interface Punto {
        x: number;
        y: number;
    }
    
    export class Rectangulo {
        constructor(
            private ancho: number,
            private alto: number
        ) {}
        
        calcularArea(): number {
            return this.ancho * this.alto;
        }
    }
    
    export function distancia(p1: Punto, p2: Punto): number {
        return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2));
    }
}

Para utilizar elementos de un namespace, empleamos la notación de punto:

const punto1: Geometria.Punto = { x: 0, y: 0 };
const punto2: Geometria.Punto = { x: 3, y: 4 };

const rectangulo = new Geometria.Rectangulo(10, 5);
const area = rectangulo.calcularArea();
const distanciaEntrePuntos = Geometria.distancia(punto1, punto2);

Los namespaces pueden anidarse para crear jerarquías más complejas:

namespace Aplicacion {
    export namespace Utilidades {
        export function formatearFecha(fecha: Date): string {
            return fecha.toLocaleDateString('es-ES');
        }
        
        export namespace Validacion {
            export function esEmailValido(email: string): boolean {
                return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
            }
        }
    }
}

// Uso de namespaces anidados
const fechaFormateada = Aplicacion.Utilidades.formatearFecha(new Date());
const emailValido = Aplicacion.Utilidades.Validacion.esEmailValido("test@example.com");

Módulos: El Sistema Moderno

Los módulos representan el enfoque moderno y recomendado para organizar código en TypeScript. Cada archivo se considera un módulo independiente con su propio ámbito de variables, evitando conflictos globales y proporcionando un control granular sobre qué elementos se exponen.

Exportación de elementos desde un módulo:

// archivo: matematicas.ts
export interface Operacion {
    ejecutar(a: number, b: number): number;
}

export class Calculadora {
    sumar(a: number, b: number): number {
        return a + b;
    }
    
    multiplicar(a: number, b: number): number {
        return a * b;
    }
}

export const PI = 3.14159;

export function factorial(n: number): number {
    return n <= 1 ? 1 : n * factorial(n - 1);
}

// Exportación por defecto
export default class CalculadoraAvanzada extends Calculadora {
    potencia(base: number, exponente: number): number {
        return Math.pow(base, exponente);
    }
}

Importación de elementos en otro módulo:

// archivo: main.ts
import CalculadoraAvanzada, { Calculadora, PI, factorial } from './matematicas';
import { Operacion } from './matematicas';

const calc = new Calculadora();
const resultado = calc.sumar(5, 3);

const calcAvanzada = new CalculadoraAvanzada();
const potencia = calcAvanzada.potencia(2, 8);

console.log(`El valor de PI es: ${PI}`);
console.log(`Factorial de 5: ${factorial(5)}`);

Patrones de Importación y Exportación

Guarda tu progreso

Inicia sesión para no perder tu progreso y accede a miles de tutoriales, ejercicios prácticos y nuestro asistente de IA.

Progreso guardado
Asistente IA
Ejercicios
Iniciar sesión gratis

Más de 25.000 desarrolladores ya confían en CertiDevs

TypeScript ofrece múltiples patrones de importación para diferentes necesidades:

Importación con alias:

import { Calculadora as Calc, PI as ConstantePi } from './matematicas';

const miCalculadora = new Calc();
console.log(`Valor de pi: ${ConstantePi}`);

Importación de todo el módulo:

import * as Mat from './matematicas';

const calc = new Mat.Calculadora();
const resultado = Mat.factorial(6);

Importación dinámica para carga bajo demanda:

async function cargarModulo() {
    const modulo = await import('./matematicas');
    const calc = new modulo.Calculadora();
    return calc.sumar(10, 20);
}

Re-exportación y Módulos Barrel

Los módulos barrel permiten crear puntos de entrada centralizados que simplifican las importaciones:

// archivo: index.ts (barrel module)
export { Calculadora, PI, factorial } from './matematicas';
export { Geometria } from './geometria';
export { Utilidades } from './utilidades';

// Ahora podemos importar desde un solo lugar
import { Calculadora, Geometria, Utilidades } from './mi-biblioteca';

La re-exportación selectiva ofrece control sobre qué elementos exponer:

// Exportar solo elementos específicos
export { Calculadora, PI } from './matematicas';
// No exportamos factorial para mantenerlo interno

Resolución de Módulos

TypeScript utiliza diferentes estrategias de resolución para localizar módulos. La resolución relativa busca archivos en rutas específicas:

// Importaciones relativas
import { MiClase } from './modulos/mi-clase';
import { Utilidad } from '../utilidades/helper';

La resolución no relativa busca en node_modules y rutas configuradas:

// Importaciones de bibliotecas externas
import * as lodash from 'lodash';
import { Component } from '@angular/core';

Los módulos de declaración permiten trabajar con bibliotecas JavaScript existentes:

// archivo: tipos.d.ts
declare module 'mi-biblioteca-js' {
    export function procesarDatos(datos: any[]): string;
    export interface ConfiguracionBiblioteca {
        timeout: number;
        retries: number;
    }
}

Esta organización modular facilita el mantenimiento del código, mejora la reutilización y permite crear aplicaciones escalables con una arquitectura clara y bien estructurada.

Completa TypeScript y certifícate

Únete a nuestra plataforma y accede a miles de tutoriales, ejercicios prácticos, proyectos reales y nuestro asistente de IA personalizado para acelerar tu aprendizaje.

Asistente IA

Resuelve dudas al instante

Ejercicios

Practica con proyectos reales

Certificados

Valida tus conocimientos

Más de 25.000 desarrolladores ya se han certificado con CertiDevs

⭐⭐⭐⭐⭐
4.9/5 valoración