Trabalhando com CSV em TypeScript: guia completo
CSV (Comma-Separated Values) — um dos formatos mais populares para troca de dados tabulares. Em TypeScript (e JavaScript) existem várias bibliotecas poderosas para parsing, geração e processamento de arquivos CSV. Neste artigo, veremos as principais ferramentas, suas capacidades e daremos exemplos práticos.
Por que usar bibliotecas para CSV?
Os recursos nativos do JavaScript (por exemplo, split(',')) não consideram casos complexos:
- Aspas escapadas e vírgulas dentro de campos
- Separadores diferentes (ponto e vírgula, tabulação)
- Codificações diferentes e BOM
- Valores multilinha
- Tipos diferentes de final de linha (CRLF, LF)
Bibliotecas profissionais resolvem todos esses problemas e fornecem uma API conveniente para trabalhar com dados.
1. csv-parse — parsing de CSV em Node.js e navegador
csv-parse — faz parte do ecossistema csv.js, uma das bibliotecas de parsing mais populares. Funciona tanto em Node.js quanto no navegador (via bundler).
Instalação
npm install csv-parseExemplo de uso com TypeScript
import { parse } from 'csv-parse/sync';import { readFileSync } from 'fs';
interface User { id: number; name: string; email: string;}
const csvData = readFileSync('users.csv', 'utf-8');const records: User[] = parse(csvData, { columns: true, // primeira linha — cabeçalhos skip_empty_lines: true, delimiter: ',', cast: (value, context) => { if (context.column === 'id') return parseInt(value, 10); return value; }});
console.log(records);2. PapaParse — parser universal para navegador e Node.js
PapaParse — é uma biblioteca com excelente suporte para arquivos grandes (processamento em streaming), detecção automática de delimitador e amplas opções de configuração.
Instalação
npm install papaparseExemplo com tipagem de resultados
import Papa from 'papaparse';
interface Product { sku: string; price: number; quantity: number;}
const csvString = `sku,price,quantityABC-001,29.99,100ABC-002,49.50,50`;
const result = Papa.parse<Product>(csvString, { header: true, dynamicTyping: true, // conversão automática de tipos skipEmptyLines: true});
if (result.errors.length > 0) { console.error('Erros de parsing:', result.errors);} else { result.data.forEach(product => { console.log(`Produto ${product.sku}: ${product.price} R$`); });}3. csv-stringify — geração de CSV a partir de dados
Para a tarefa inversa — criar CSV a partir de arrays de objetos — use csv-stringify. Ele também faz parte do ecossistema csv.js.
Instalação
npm install csv-stringifyExemplo de geração de CSV
import { stringify } from 'csv-stringify/sync';import { writeFileSync } from 'fs';
interface Order { orderId: number; customer: string; total: number;}
const orders: Order[] = [ { orderId: 1001, customer: 'Ivan Petrov', total: 1500.50 }, { orderId: 1002, customer: 'Maria Sidorova', total: 2300.00 }, { orderId: 1003, customer: 'Alexei Ivanov', total: 890.75 }];
const csvOutput = stringify(orders, { header: true, columns: ['orderId', 'customer', 'total']});
writeFileSync('orders.csv', csvOutput, 'utf-8');console.log('Arquivo CSV criado com sucesso');4. Tratamento de erros e validação de dados
Ao trabalhar com CSV, é importante tratar os erros corretamente. Vejamos um exemplo com verificação de dados:
import Papa from 'papaparse';
interface ValidatedRow { isValid: boolean; errors: s Também na biblioteca
Geração Swagger/OpenAPI em Kotlin: guia completo de ferramentas
Anvil para Kotlin: guia completo com exemplos práticos
Trabalhando com Kafka em Rust: bibliotecas e exemplos para iniciantes
Análise de HTML em Java: melhores bibliotecas e exemplos de código