العمل مع نظام الملفات في TypeScript: دليل شامل

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة في العمل مع نظام الملفات في TypeScript



يعد العمل مع نظام الملفات إحدى المهام الرئيسية عند تطوير تطبيقات الخادم والأدوات المساعدة وأدوات سطر الأوامر. TypeScript، كونه امتدادًا لـ JavaScript، يوفر جميع إمكانيات Node.js للتفاعل مع الملفات والدلائل، ولكنه يضيف كتابة صارمة، مما يجعل الكود أكثر موثوقية وقابلية للتنبؤ.



في هذه المقالة، سنستعرض بالتفصيل كيفية العمل مع نظام الملفات في TypeScript: من العمليات الأساسية للقراءة والكتابة إلى التقنيات المتقدمة مثل العمل مع التدفقات والمعالجة غير المتزامنة. جميع الأمثلة مصحوبة بكود جاهز يمكنك استخدامه فورًا في مشاريعك.



للعمل مع نظام الملفات في TypeScript، يتم استخدام الوحدة المدمجة fs (file system) من Node.js. توفر هذه الوحدة طرقًا متزامنة وغير متزامنة. في المشاريع الحديثة، يُوصى باستخدام الإصدارات غير المتزامنة مع الـ Promises (fs.promises) للتنفيذ غير المحظور.



1. إعداد المشروع واستيراد الوحدات



قبل البدء، تأكد من أن مشروعك مُعد للعمل مع Node.js و TypeScript. قم بإنشاء دليل المشروع وتهيئته:



mkdir fs-typescript-tutorialcd fs-typescript-tutorialnpm init -ynpm install typescript @types/node --save-devnpx tsc --init


بعد الإعداد، في ملف tsconfig.json، تأكد من أن المعامل module مضبوط على commonjs أو ESNext، وأن target مضبوط على ES2020 أو أعلى.



الآن لنقم بإنشاء ملف index.ts واستيراد الوحدات اللازمة:



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

// أو استخدام إصدار promisesimport { promises as fsPromises } from 'fs';


الوحدة path مهمة أيضًا: فهي توفر أدوات للعمل مع مسارات الملفات، مما يجعل الكود متعدد المنصات (Windows vs Unix).



2. قراءة وكتابة الملفات



2.1 قراءة ملف



لنستعرض العمليات الأساسية مع الملفات. سنبدأ بقراءة محتوى ملف. النهج غير المتزامن باستخدام async/await هو الطريقة الأكثر حداثة وراحة.



import { promises as fs } from 'fs';

async function readFileExample(filePath: string): Promise<string> { try { const data = await fs.readFile(filePath, 'utf-8'); return data; } catch (error) { console.error('خطأ في قراءة الملف:', error); throw error; }}

// الاستخدامasync function main() { const content = await readFileExample('./example.txt'); console.log('محتوى الملف:', content);}

main();


تأخذ طريقة readFile مسار الملف وترميزًا اختياريًا (افتراضيًا null — يُرجع Buffer). إذا تم تحديد 'utf-8'، فسيتم إرجاع سلسلة نصية.



2.2 الكتابة في ملف



تتم كتابة البيانات في ملف باستخدام writeFile. إذا كان الملف غير موجود، فسيتم إنشاؤه. إذا كان موجودًا، فسيتم استبداله.



import { promises as fs } from 'fs';

async function writeFileExample(filePath: string, data: string): Promise<void> { try { await fs.writeFile(filePath, data, 'utf-8'); console.log('تمت كتابة الملف بنجاح'); } catch (error) { console.error('خطأ في كتابة الملف:', error); throw error; }}

// الإلحاق بنهاية الملف (append)async function appendFileExample(filePath: string, data: string): Promise<void> { try { await fs.appendFile(filePath, data + '', 'utf-8'); console.log('تمت إضافة البيانات إلى نهاية الملف'); } catch (error) { console.error('خطأ في إضافة البيانات:', error); throw error; }}


2.3 العمل مع ملفات JSON



غالبًا في التطبيقات، يلزم حفظ وتحميل البيانات بتنسيق JSON. إليك غلاف مناسب:

المدونات

توصيات الكتب