Trabajo con CSV en TypeScript: bibliotecas y ejemplos de código

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

Trabajo con CSV en TypeScript: guía completa



CSV (Comma-Separated Values) es uno de los formatos más comunes para el intercambio de datos tabulares. En el ecosistema de TypeScript hay varias bibliotecas potentes que permiten leer, escribir y transformar archivos CSV con soporte completo de tipos. En este artículo analizaremos las herramientas principales, su instalación y ejemplos prácticos.



Bibliotecas populares para trabajar con CSV



Las bibliotecas más utilizadas en el entorno TypeScript/Node.js son:



  • csv-parse — parte del conjunto csv, un analizador confiable con soporte para streams
  • papaparse — un analizador universal para navegador y Node.js
  • csv-stringify — generador de CSV a partir de arrays/objetos
  • csvtojson — convertidor de CSV a JSON con tipificación


Instalación y configuración



Para proyectos en TypeScript, la instalación se realiza a través de npm o yarn:



npm install csv-parse csv-stringify papaparse @types/papaparse


Si usas csv-parse, no se requieren tipos adicionales: la biblioteca tiene soporte integrado para TypeScript.



Ejemplo 1: Análisis de CSV con csv-parse



La biblioteca csv-parse es ideal para trabajar con archivos grandes gracias a su API de streams. Veamos un ejemplo básico:



import { parse } from 'csv-parse/sync';import * as fs from 'fs';

interface User { id: number; name: string; email: string; age: number;}

const csvData = fs.readFileSync('users.csv', 'utf-8');

const records: User[] = parse(csvData, { columns: true, // primera fila como encabezados skip_empty_lines: true, delimiter: ',', cast: (value, context) => { if (context.column === 'id' || context.column === 'age') { return Number(value); } return value; }});

console.log(records);// [// { id: 1, name: 'Iván', email: 'ivan@example.com', age: 30 },// { id: 2, name: 'María', email: 'maria@example.com', age: 25 }// ]


Ejemplo 2: Generación de CSV con tipificación



Para crear archivos CSV, usa csv-stringify. Definamos el tipo de datos y generemos una cadena:



import { stringify } from 'csv-stringify/sync';

interface Product { productId: string; name: string; price: number; inStock: boolean;}

const products: Product[] = [ { productId: 'P001', name: 'Portátil', price: 75000, inStock: true }, { productId: 'P002', name: 'Ratón', price: 1500, inStock: false }, { productId: 'P003', name: 'Teclado', price: 3500, inStock: true }];

const csvOutput = stringify(products, { header: true, columns: ['productId', 'name', 'price', 'inStock']});

console.log(csvOutput);// productId,name,price,inStock// P001,Portátil,75000,true// P002,Ratón,1500,false// P003,Teclado,3500,true


Ejemplo 3: Uso de PapaParse en el navegador



PapaParse es ideal para el procesamiento de CSV en el lado del cliente. Ejemplo con carga de archivo mediante input:



import Papa from 'papaparse';

interface Transaction { date: string; amount: number; category: string; description: string;}

const fileInput = document.getElementById('csvInput') as HTMLInputElement;

fileInput.addEventListener('change', (event) => { const file = (event.target as HTMLInputElement).files?.[0]; if (!file) return;

Papa.parse<Transaction>(file, { header: true, dynamicTyping: true, // conversión automática de tipos skipEmptyLines: true, complete: (result) => { console.log('Análisis completado:', result.data); // result.data — array de objetos Transaction }, error: (error) => { console.error('Error de análisis:', error); } });});


Ejemplo 4:

Recommendations