TypeScript अकेला क्यों नहीं रह सकता?
\nजब हम TypeScript में लिखते हैं, तो हम इसकी सख्ती, ऑटो-कम्प्लीशन और जेनेरिक्स के आदी हो जाते हैं। लेकिन देर-सबेर हर डेवलपर के सामने सवाल आता है: "क्या होगा अगर मुझे Python, C++ या Go का कोड कॉल करना पड़े?" क्या पूरा प्रोजेक्ट दोबारा लिखना होगा?
\nअच्छी खबर: TypeScript कोई अलग-थलग द्वीप नहीं है। यह नेटिव मॉड्यूल, WebAssembly, gRPC और सामान्य HTTP ब्रिज के ज़रिए दूसरी भाषाओं से दोस्ती कर सकता है। इस लेख में हम TypeScript को दूसरी भाषाओं से जोड़ने के तीन असली परिदृश्य देखेंगे। आप सीखेंगे कि फ्रंटएंड, बैकएंड और हाई-परफॉर्मेंस कंप्यूटिंग को एक स्टैक में कैसे जोड़ा जाए।
\n\nपरिदृश्य 1: TypeScript + Python — डेटा साइंस को सुपरचार्ज करें
\nPython मशीन लर्निंग और डेटा एनालिसिस का बादशाह है। लेकिन इसकी कमज़ोरी वेब इंटरफेस है। TypeScript, इसके विपरीत, ब्राउज़र और सर्वर पर शानदार काम करता है। दोनों की ताकत को मिलाना समझदारी है।
\n\nतरीका A: HTTP माइक्रोसर्विस (सबसे आसान)
\nसबसे सीधा रास्ता — Python सर्वर (जैसे FastAPI) चलाएँ और TypeScript से fetch के ज़रिए उसे कॉल करें।
\nPython (backend.py):
\nfrom fastapi import FastAPI\nfrom pydantic import BaseModel\nimport joblib\n\napp = FastAPI()\nmodel = joblib.load('model.pkl')\n\nclass InputData(BaseModel):\n features: list[float]\n\n@app.post("/predict")\ndef predict(data: InputData):\n result = model.predict([data.features])\n return {"prediction": result.tolist()}\n\nTypeScript (frontend.ts):
\ninterface PredictionResponse {\n prediction: number[];\n}\n\nasync function getPrediction(features: number[]): Promise<number[]> {\n const response = await fetch('http://localhost:8000/predict', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ features })\n });\n \n if (!response.ok) throw new Error('भविष्यवाणी में त्रुटि');\n \n const data: PredictionResponse = await response.json();\n return data.prediction;\n}\n\n// उपयोग\ngetPrediction([1.2, 3.4, 5.6])\n .then(pred => console.log('परिणाम:', pred))\n .catch(err => console.error(err));\n\n\nतरीका B: child_process के ज़रिए Python स्क्रिप्ट (बैकएंड के लिए)
\nअगर आपको अलग सर्वर की ज़रूरत नहीं है, तो Node.js से सीधे Python चला सकते हैं। यह एक बार के कामों के लिए सुविधाजनक है — इमेज प्रोसेसिंग, रिपोर्ट जनरेशन।
\nimport { exec } from 'child_process';\nimport { promisify } from 'util';\n\nconst execPromise = promisify(exec);\n\nasync function runPythonScript(scriptPath: string, args: string[]): Promise<string> {\n const command = `python3 ${scriptPath} ${args.join(' ')}`;\n const { stdout, stderr } = await execPromise(command);\n \n if (stderr) throw new Error(`Python त्रुटि: ${stderr}`);\n return stdout.trim();\n}\n\n// उदाहरण: Python को JSON भेजें\nconst result = await runPythonScript('./analyze.py', ['--data', '{"value": 42}']);\nconsole.log('Python ने जवाब दिया:', result);\n\nमहत्वपूर्ण: यह तरीका माइक्रोसर्विस से धीमा है, लेकिन अलग सर्वर सेट करने की ज़रूरत नहीं है। प्रोटोटाइप और CI/CD के लिए उपयुक्त है।
\n\nपरिदृश्य 2: TypeScript + C++ — जबरदस्त स्पीड
\nजब वीडियो, ऑडियो या क्रिप्टोग्राफी प्रोसेस करनी हो, तो Python काफी नहीं होता। यहाँ C++ और इसका शक्तिशाली साथी WebAssembly (WASM) काम आता है।
\n\nC++ को WASM में कंपाइल करें और TypeScript से कॉल करें
\nमान लीजिए, हमारे पास C++ का एक सरल फंक्शन है जो मैट्रिक्स गुणा को तेज़ करता है:
\n// matrix.cpp\nextern "C" {\n void multiply_matrices(float* a, float* b, float* result, int size) {\n for (int i = 0; i < size; i++) {\n for (int j = 0; j < size; j++) {\n float sum = 0.0f;\n for (int k = 0; k < size; k++) {\n sum += a[i * size + k] * b[k * size + j];\n