परिचय: TypeScript में फ़ाइल सिस्टम की आवश्यकता क्यों?
\n\nहर एप्लिकेशन को कभी न कभी फ़ाइल सिस्टम के साथ इंटरैक्ट करना पड़ता है: कॉन्फ़िगरेशन सेव करना, अपलोड की गई फ़ाइलों को प्रोसेस करना, लॉग रखना या प्रोजेक्ट मैनेज करना। TypeScript, JavaScript का एक सुपरसेट होने के नाते, Node.js के fs (File System) मॉड्यूल के ज़रिए फ़ाइलों और डायरेक्ट्रीज़ के साथ काम करने के लिए शक्तिशाली टूल्स प्रदान करता है।
इस लेख में हम व्यावहारिक उदाहरणों के साथ TypeScript में फ़ाइल सिस्टम के मुख्य ऑपरेशन्स को समझेंगे: फ़ाइलें पढ़ना और लिखना, डायरेक्ट्रीज़ बनाना और हटाना, और एरर हैंडलिंग। सभी उदाहरण सख्त टाइपिंग (strict typing) के साथ दिए जाएंगे, जो TypeScript का मुख्य लाभ है।
\n\nफ़ाइल सिस्टम के लिए मुख्य मॉड्यूल
\n\nप्रैक्टिस में जाने से पहले, तीन मुख्य मॉड्यूल्स को जान लेते हैं जिनकी ज़रूरत होगी:
\n\n- \n
- fs — फ़ाइल सिस्टम ऑपरेशन्स (पढ़ना, लिखना, हटाना) के लिए मुख्य मॉड्यूल \n
- fs/promises —
fsमॉड्यूल का प्रॉमिस-आधारित वर्शन (आधुनिक कोड के लिए अनुशंसित) \n - path — फ़ाइल और डायरेक्ट्री पथों के साथ काम करने के लिए यूटिलिटी \n
TypeScript में मॉड्यूल इम्पोर्ट करने के लिए निम्न सिंटैक्स का उपयोग करें:
\n\nimport * as fs from 'fs';\nimport * as fsPromises from 'fs/promises';\nimport * as path from 'path';\n\nध्यान दें: TypeScript के साथ सही काम करने के लिए सुनिश्चित करें कि आपकी tsconfig.json फ़ाइल में "moduleResolution": "node" और "esModuleInterop": true ऑप्शन सेट हों।
फ़ाइलें पढ़ना: सिंक्रोनस और एसिंक्रोनस तरीके
\n\nटाइपिंग के साथ सिंक्रोनस रीडिंग
\n\nसिंक्रोनस मेथड्स कोड के एक्ज़ीक्यूशन को तब तक ब्लॉक करते हैं जब तक ऑपरेशन पूरा न हो जाए। इनका उपयोग केवल छोटी फ़ाइलों या एप्लिकेशन की शुरुआती लोडिंग में करें:
\n\nimport * as fs from 'fs';\nimport * as path from 'path';\n\nfunction readConfigSync(): Record<string, unknown> {\n const configPath = path.join(__dirname, 'config.json');\n \n try {\n const data = fs.readFileSync(configPath, 'utf-8');\n return JSON.parse(data) as Record<string, unknown>;\n } catch (error) {\n if (error instanceof Error) {\n console.error('कॉन्फ़िग पढ़ने में त्रुटि:', error.message);\n }\n return {};\n }\n}\n\nconst config = readConfigSync();\nconsole.log('कॉन्फ़िगरेशन लोड हुआ:', config);\n\nasync/await के साथ एसिंक्रोनस रीडिंग (अनुशंसित तरीका)
\n\nप्रोडक्शन कोड के लिए हमेशा एसिंक्रोनस मेथड्स का उपयोग करें। TypeScript async/await के साथ बेहतरीन काम करता है:
\n\nimport { readFile } from 'fs/promises';\nimport * as path from 'path';\n\ninterface UserData {\n id: number;\n name: string;\n email: string;\n}\n\nasync function readUserData(fileName: string): Promise<UserData[]> {\n const filePath = path.resolve('data', fileName);\n \n try {\n const rawData = await readFile(filePath, { encoding: 'utf-8' });\n const users: UserData[] = JSON.parse(rawData);\n return users;\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`फ़ाइल ${fileName} पढ़ने में विफल: ${error.message}`);\n }\n throw error;\n }\n}\n\n// उपयोग\n(async () => {\n try {\n const users = await readUserData('users.json');\n console.log(`${users.length} उपयोगकर्ता लोड हुए`);\n } catch (error) {\n console.error(error);\n }\n})();\n\nफ़ाइलें लिखना और अपडेट करना
\n\nफ़ाइलें बनाना और ओवरराइट करना
\n\nफ़ाइल में डेटा लिखने के लिए writeFile मेथड का उपयोग करें। यह फ़ाइल न होने पर बनाएगा, या मौजूदा फ़ाइल को ओवरराइट करेगा:
import { writeFile, mkdir } from 'fs/promises';\nimport * as path from 'path';\n\ninterface LogEntry {\n timestamp: string;\n level: 'info' | 'warn' | 'error';\n message: string;\n}\n\n