Trabajo con el sistema de archivos en TypeScript: guía práctica

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: ¿por qué es necesario trabajar con el sistema de archivos en TypeScript?



TypeScript, al ser una extensión fuertemente tipada de JavaScript, proporciona a los desarrolladores herramientas potentes para trabajar con el sistema de archivos. Independientemente de si estás creando una utilidad para procesar registros, un servidor web con carga de archivos o una herramienta para migración de datos, la capacidad de interactuar eficientemente con el sistema de archivos es una habilidad fundamental.



En este artículo, exploraremos los aspectos prácticos del trabajo con el sistema de archivos en TypeScript utilizando el módulo incorporado fs (File System) de Node.js. Todos los ejemplos estarán acompañados de comentarios detallados y explicaciones. Analizaremos métodos síncronos y asíncronos, el manejo de rutas y la tipificación de datos.



1. Configuración del proyecto e importación del módulo fs



Antes de comenzar, es necesario configurar un proyecto TypeScript. Asegúrate de tener instalados Node.js y el gestor de paquetes npm. Crea un nuevo proyecto e instala los tipos para Node.js:



npm init -ynpm install typescript @types/node --save-devnpm install ts-node --save-dev


Crea un archivo tsconfig.json y agrega la configuración básica:



{  "compilerOptions": {    "target": "ES2020",    "module": "commonjs",    "strict": true,    "esModuleInterop": true,    "outDir": "./dist",    "rootDir": "./src"  },  "include": ["src/**/*"]}


Ahora, en tu archivo index.ts, importa los módulos fs y path:



import * as fs from 'fs';import * as path from 'path';


Importante: En TypeScript usamos import * as para importar todo el módulo. Esto asegura la tipificación completa de todos los métodos.



2. Lectura de archivos: enfoques síncrono y asíncrono



2.1 Lectura asíncrona (método recomendado)



En TypeScript, es preferible usar métodos asíncronos, ya que no bloquean el hilo principal de ejecución. Veamos un ejemplo de lectura de un archivo de texto:



import * as fs from 'fs/promises';import * as path from 'path';

async function readFileExample(filePath: string): Promise<string> { try { const absolutePath = path.resolve(filePath); const content: string = await fs.readFile(absolutePath, 'utf-8'); return content; } catch (error) { if (error instanceof Error) { throw new Error(`Error al leer el archivo: ${error.message}`); } throw error; }}

// Uso(async () => { const data = await readFileExample('./data/example.txt'); console.log('Contenido del archivo:', data);})();


Observa el uso de fs/promises — es la versión del módulo con promesas, que se integra perfectamente con async/await en TypeScript.



2.2 Lectura síncrona (para escenarios simples)



A veces, por ejemplo, al cargar la configuración al iniciar, se pueden usar métodos síncronos:



import * as fs from 'fs';import * as path from 'path';

function readConfigSync(configPath: string): Record<string, unknown> { const fullPath = path.join(__dirname, configPath); const rawData = fs.readFileSync(fullPath, 'utf-8'); return JSON.parse(rawData);}

const config = readConfigSync('./config.json');console.log('Configuración:', config);


3. Escritura y modificación de archivos



3.1 Escritura de datos en un archivo



Para escribir datos en un archivo, usa writeFile. TypeScript permite tipificar estrictamente los datos antes de escribirlos:



import * as fs from 'fs/promises';

interface UserData { id: number; name: string; email: string;}

async function saveUserData(users: UserData[]): Promise<void> { const jsonString: string = JSON.stringify(users, null, 2); await fs.writeFile('./users.json', jsonString, 'utf-8'); con

Blogs

Book Recommendations