TypeScript में फ़ाइल सिस्टम के साथ काम करने का परिचय
\nफ़ाइल सिस्टम के साथ काम करना TypeScript में विकास करते समय प्रमुख कार्यों में से एक है। चाहे आप सर्वर एप्लिकेशन बना रहे हों, डेटा प्रोसेसिंग के लिए उपयोगिता बना रहे हों, या वेब सर्वर बना रहे हों, आपको निश्चित रूप से फ़ाइलों और निर्देशिकाओं को पढ़ने, लिखने और प्रबंधित करने की आवश्यकता होगी। इस गाइड में, हम TypeScript में fs (File System) मॉड्यूल के साथ काम करने की मूल बातें समझेंगे, सिंक्रोनस और एसिंक्रोनस ऑपरेशनों पर विचार करेंगे, और त्रुटियों को संभालना सीखेंगे।
TypeScript, JavaScript के ऊपर एक सख्ती से टाइप की गई परत है, जो स्टैटिक टाइपिंग जोड़ती है। फ़ाइल सिस्टम के साथ काम करते समय, हम मानक Node.js मॉड्यूल fs का उपयोग करेंगे, लेकिन TypeScript के अतिरिक्त लाभों के साथ: ऑटो-कम्प्लीशन, टाइप चेकिंग और बेहतर कोड पठनीयता।
प्रोजेक्ट सेटअप और मॉड्यूल आयात करना
\nशुरू करने से पहले, सुनिश्चित करें कि आपके पास Node.js और TypeScript स्थापित है। एक नया प्रोजेक्ट बनाएं और आवश्यक प्रकार स्थापित करें:
\nmkdir fs-typescript-tutorial\ncd fs-typescript-tutorial\nnpm init -y\nnpm install typescript @types/node --save-dev\nnpx tsc --init\nफ़ाइल सिस्टम के साथ काम करने के लिए हमें दो मुख्य मॉड्यूल की आवश्यकता होगी:
\n- \n
- fs — फ़ाइलों के साथ संचालन करने के लिए (पढ़ना, लिखना, हटाना आदि) \n
- path — पथों के साथ आसानी से काम करने के लिए (जोड़ना, सामान्यीकरण, एक्सटेंशन प्राप्त करना) \n
उन्हें अपनी TypeScript फ़ाइल में आयात करें:
\nimport * as fs from 'fs';\nimport * as path from 'path';\n\n// वैकल्पिक तरीका — केवल आवश्यक फ़ंक्शन आयात करना:\nimport { readFileSync, writeFileSync, mkdirSync, existsSync } from 'fs';\nimport { join, resolve } from 'path';\nध्यान दें: हम import * as fs का उपयोग कर रहे हैं, क्योंकि fs मॉड्यूल कई फ़ंक्शन निर्यात करता है। TypeScript स्वचालित रूप से स्थापित पैकेज @types/node से प्रकार ले लेगा।
फ़ाइलें पढ़ना और लिखना
\nआइए सबसे बुनियादी संचालन से शुरू करें — टेक्स्ट फ़ाइलों को पढ़ना और लिखना। Node.js में दो दृष्टिकोण हैं: सिंक्रोनस और एसिंक्रोनस। सरल स्क्रिप्ट और उपयोगिताओं के लिए अक्सर सिंक्रोनस विधियों का उपयोग किया जाता है, और उच्च-लोड वाले सर्वरों के लिए एसिंक्रोनस विधियों का उपयोग किया जाता है, ताकि event loop ब्लॉक न हो।
\n\nसिंक्रोनस पढ़ना और लिखना
\nसिंक्रोनस विधियाँ ऑपरेशन पूरा होने तक प्रोग्राम के निष्पादन को ब्लॉक करती हैं। वे उपयोग में सरल हैं और उन परिदृश्यों के लिए उपयुक्त हैं जहाँ गति महत्वपूर्ण नहीं है:
\nimport { readFileSync, writeFileSync } from 'fs';\nimport { join } from 'path';\n\nconst filePath = join(__dirname, 'data.txt');\n\n// फ़ाइल में लिखना (यदि फ़ाइल मौजूद नहीं है तो बनाता है)\nwriteFileSync(filePath, 'Hello, TypeScript!', 'utf-8');\n\n// फ़ाइल से पढ़ना\nconst content: string = readFileSync(filePath, 'utf-8');\nconsole.log(content); // आउटपुट: Hello, TypeScript!\ncontent: string टाइपिंग पर ध्यान दें — TypeScript गारंटी देता है कि हमें एक स्ट्रिंग मिलेगी। यदि फ़ाइल मौजूद नहीं है, तो एक अपवाद फेंका जाएगा, जिसे try/catch के माध्यम से संभाला जाना चाहिए।
एसिंक्रोनस पढ़ना और लिखना
\nएसिंक्रोनस विधियाँ कॉलबैक लेती हैं या Promise लौटाती हैं (आधुनिक संस्करणों में)। async/await के साथ Promise संस्करणों का उपयोग करने की अनुशंसा की जाती है:
\nimport { promises as fsPromises } from 'fs';\nimport { join } from 'path';\n\nconst filePath = join(__dirname, 'async-data.txt');\n\nasync function handleFile(): Promise<void> {\n try {\n // एसिंक्रोनस लिखना\n await fsPromises.writeFile(filePath, 'Async content', 'utf-8');\n \n // एसिंक्रोनस पढ़ना\n const data: string = await fsPromises.readFile(filePath, 'utf-8');\n console.log(data); // Async content\n } catch (error) {\n console.error('फ़ाइल के साथ काम करते समय त्रुटि:', error);\n }\n}\n\nhandleFile();\nasync/await का उपयोग कोड को सिंक्रोनस जैसा बनाता है