En TypeScript, los módulos y los espacios de nombres son dos mecanismos que permiten organizar y estructurar el código de manera eficiente. Aunque ambos tienen propósitos similares, se utilizan en contextos diferentes y tienen características distintas.
Módulos
¿Qué es un Módulo?
Un módulo en TypeScript es un archivo que contiene código y exporta uno o más elementos (variables, funciones, clases, interfaces, etc.) que pueden ser importados y utilizados en otros archivos. Los módulos ayudan a dividir el código en partes reutilizables y mantenibles.
Sintaxis de Módulos
Exportación
Para exportar elementos de un módulo, se utiliza la palabra clave export
.
// mathUtils.ts export function add(a: number, b: number): number { return a + b; } export const PI = 3.14;
Importación
Para importar elementos de un módulo, se utiliza la palabra clave import
.
// main.ts import { add, PI } from './mathUtils'; console.log(add(2, 3)); // 5 console.log(PI); // 3.14
Exportación por Defecto
TypeScript también permite exportar un único valor por defecto desde un módulo.
Reexportación
Es posible reexportar elementos de otros módulos.
Espacios de Nombres
¿Qué es un Espacio de Nombres?
Un espacio de nombres (namespace) es una forma de agrupar código bajo un nombre común, evitando colisiones de nombres y organizando el código de manera lógica. A diferencia de los módulos, los espacios de nombres no generan archivos separados.
Sintaxis de Espacios de Nombres
Definición
Para definir un espacio de nombres, se utiliza la palabra clave namespace
.
namespace Geometry { export function areaOfCircle(radius: number): number { return Math.PI * radius * radius; } export function circumferenceOfCircle(radius: number): number { return 2 * Math.PI * radius; } }
Uso
Para utilizar elementos de un espacio de nombres, se debe referenciar el nombre del espacio de nombres.
console.log(Geometry.areaOfCircle(5)); // 78.53981633974483 console.log(Geometry.circumferenceOfCircle(5)); // 31.41592653589793
Anidación de Espacios de Nombres
Los espacios de nombres pueden anidarse para organizar mejor el código.
namespace Geometry { export namespace Circle { export function area(radius: number): number { return Math.PI * radius * radius; } export function circumference(radius: number): number { return 2 * Math.PI * radius; } } } console.log(Geometry.Circle.area(5)); // 78.53981633974483 console.log(Geometry.Circle.circumference(5)); // 31.41592653589793
Comparación entre Módulos y Espacios de Nombres
Característica | Módulos | Espacios de Nombres |
---|---|---|
Definición | Archivos separados | Agrupación lógica dentro de un archivo |
Importación/Exportación | import /export |
No requiere importación explícita |
Uso en JavaScript | Compatible con ES6+ | No es una característica de ES6+ |
Ámbito | Global (si se importa) | Local al archivo |
Ejercicio Práctico
Ejercicio
- Crea un archivo
shapes.ts
que contenga un espacio de nombresShapes
con dos funciones:areaOfSquare
yperimeterOfSquare
. - Exporta estas funciones desde el espacio de nombres.
- Crea un archivo
main.ts
que importe y utilice estas funciones.
Solución
shapes.ts
namespace Shapes { export function areaOfSquare(side: number): number { return side * side; } export function perimeterOfSquare(side: number): number { return 4 * side; } }
main.ts
/// <reference path="./shapes.ts" /> console.log(Shapes.areaOfSquare(4)); // 16 console.log(Shapes.perimeterOfSquare(4)); // 16
Conclusión
En esta sección, hemos aprendido sobre los módulos y los espacios de nombres en TypeScript. Los módulos son ideales para dividir el código en archivos reutilizables y mantenibles, mientras que los espacios de nombres son útiles para organizar el código dentro de un mismo archivo. Ambos mecanismos son esenciales para escribir código TypeScript limpio y estructurado.
Curso de TypeScript
Módulo 1: Introducción a TypeScript
- ¿Qué es TypeScript?
- Configuración del Entorno de TypeScript
- Tipos Básicos
- Anotaciones de Tipo
- Compilando TypeScript
Módulo 2: Trabajando con Tipos
Módulo 3: Tipos Avanzados
Módulo 4: Funciones y Módulos
- Tipos de Función
- Parámetros Opcionales y Predeterminados
- Parámetros Rest
- Módulos y Espacios de Nombres
- Decoradores
Módulo 5: Programación Asíncrona
Módulo 6: Herramientas y Mejores Prácticas
- Linting y Formateo
- Pruebas de Código TypeScript
- TypeScript con Webpack
- TypeScript con React
- Mejores Prácticas