العمل مع CSV في TypeScript: دليل كامل
CSV (قيم مفصولة بفواصل) هو أحد أكثر التنسيقات شيوعًا لتبادل البيانات الجدولية. في نظام TypeScript البيئي، توجد عدة مكتبات ناضجة تسمح بتحليل وإنشاء وتحويل ملفات CSV بكفاءة مع دعم كامل للأنواع. في هذه المقالة، سنستعرض ثلاث أدوات رئيسية: csv-parse و csv-stringify و papaparse، وسنتناول أمثلة عملية لاستخدامها.
1. مكتبة csv-parse: تحليل CSV مع كتابة الأنواع
csv-parse هي جزء من نظام csv.js البيئي، وهي واحدة من أكثر المكتبات أداءً لتحليل CSV. تدعم التدفقات (streams) والمحددات المخصصة وكتابة الأنواع الصارمة عبر TypeScript.
التثبيت:
npm install csv-parsenpm install @types/csv-parse // لـ TypeScript (إذا لم يتم تضمينها تلقائيًا)مثال على تحليل سلسلة CSV:
import { parse } from 'csv-parse/sync';import { stringify } from 'csv-stringify/sync';
interface User { id: number; name: string; email: string; age: number;}
const csvData = `id,name,email,age1,إيفان إيفانوف,ivan@example.com,302,ماريا بيتروفا,maria@example.com,253,أليكسي سميرنوف,alex@example.com,35`;
// التحليل مع تحديد الأنواع بشكل صريحconst records: User[] = parse(csvData, { columns: true, // السطر الأول هو الرؤوس skip_empty_lines: true, delimiter: ',', cast: true // التحويل التلقائي للأنواع (سلاسل إلى أرقام)});
console.log(records);// [// { id: 1, name: 'إيفان إيفانوف', email: 'ivan@example.com', age: 30 },// { id: 2, name: 'ماريا بيتروفا', email: 'maria@example.com', age: 25 },// { id: 3, name: 'أليكسي سميرنوف', email: 'alex@example.com', age: 35 }// ]2. مكتبة csv-stringify: إنشاء CSV من الكائنات
csv-stringify هي مكتبة مزدوجة لإنشاء سلاسل وملفات CSV من مصفوفات الكائنات أو الصفوف (tuples). وهي مناسبة تمامًا لتصدير البيانات.
مثال على إنشاء CSV:
import { stringify } from 'csv-stringify/sync';
interface Product { sku: string; price: number; stock: number;}
const products: Product[] = [ { sku: 'PRD-001', price: 1500, stock: 10 }, { sku: 'PRD-002', price: 2500, stock: 5 }, { sku: 'PRD-003', price: 800, stock: 20 },];
const csvOutput = stringify(products, { header: true, columns: ['sku', 'price', 'stock'], // ترتيب وتصفية الحقول});
console.log(csvOutput);// sku,price,stock// PRD-001,1500,10// PRD-002,2500,5// PRD-003,800,203. مكتبة PapaParse: محلل عالمي للمتصفح و Node.js
PapaParse هي المكتبة الأكثر شيوعًا للعمل مع CSV في JavaScript/TypeScript. تعمل في كل من المتصفح و Node.js، وتدعم الملفات الكبيرة عبر التدفقات، والكشف التلقائي عن المحددات، ومعالجة الأخطاء.
التثبيت:
npm install papaparsenpm install @types/papaparseمثال على معالجة ملف في Node.js:
import fs from 'fs';import Papa from 'papaparse';
interface Transaction { date: string; amount: number; category: string;}
const fileContent = fs.readFileSync('transactions.csv', 'utf-8');
const result = Papa.parse<Transaction>(fileContent, { header: true, dynamicTyping: true, // التحويل التلقائي للأنواع skipEmptyLines: true,});
if (result.errors.length > 0) { console.error('أخطاء التحليل:', result.errors);} else { console.log('المعاملات:', result.data); // result.data — مصفوفة من كائنات Transaction}
// التحليل غير المتزامن مع التدفقات للملفات الكبيرةconst stream = fs.createReadStream('large-file.csv');Papa.parse(stream,