TypeScript als Klebstoff: Integration mit Python, C++ und Go

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Warum lebt TypeScript nicht im Vakuum?

\n

Wenn wir in TypeScript schreiben, gewöhnen wir uns an seine Strenge, Autovervollständigung und Generics. Aber früher oder später steht jeder Entwickler vor der Frage: "Was, wenn ich Code in Python, C++ oder Go aufrufen muss?". Soll ich etwa das ganze Projekt umschreiben?

\n

Die gute Nachricht: TypeScript ist keine isolierte Insel. Es kann sich mit anderen Sprachen über native Module, WebAssembly, gRPC und sogar einfache HTTP-Brücken verbinden. In diesem Artikel betrachten wir drei reale Integrationsszenarien von TypeScript mit anderen Sprachen. Sie erfahren, wie Sie Frontend, Backend und hochperformante Berechnungen in einem Stack zusammenkleben.

\n\n

Szenario 1: TypeScript + Python — Data Science auf Steroiden

\n

Python ist der König des maschinellen Lernens und der Datenanalyse. Aber seine Schwäche sind Weboberflächen. TypeScript hingegen funktioniert hervorragend im Browser und auf dem Server. Es ist logisch, ihre Kräfte zu bündeln.

\n\n

Methode A: HTTP-Mikroservice (am einfachsten)

\n

Der naheliegendste Weg ist, einen Python-Server (z.B. FastAPI) zu starten und ihn aus TypeScript per fetch aufzurufen.

\n

Python (backend.py):

\n
from 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
\n

TypeScript (frontend.ts):

\n
interface 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('Vorhersagefehler');\n    \n    const data: PredictionResponse = await response.json();\n    return data.prediction;\n}\n\n// Verwendung\ngetPrediction([1.2, 3.4, 5.6])\n    .then(pred => console.log('Ergebnis:', pred))\n    .catch(err => console.error(err));\n
\n\n

Methode B: Python-Skripte über child_process (für das Backend)

\n

Wenn Sie keinen separaten Server benötigen, können Sie Python direkt aus Node.js heraus ausführen. Das ist praktisch für einmalige Aufgaben – Bildverarbeitung, Berichtserstellung.

\n
import { 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-Fehler: ${stderr}`);\n    return stdout.trim();\n}\n\n// Beispiel: JSON an Python übergeben\nconst result = await runPythonScript('./analyze.py', ['--data', '{"value": 42}']);\nconsole.log('Python antwortete:', result);\n
\n

Wichtig: Dieser Ansatz ist langsamer als ein Mikroservice, erfordert aber keine Einrichtung eines separaten Servers. Geeignet für Prototypen und CI/CD.

\n\n

Szenario 2: TypeScript + C++ — Geschwindigkeit jenseits der Fantasie

\n

Wenn Sie Video, Audio oder Kryptographie verarbeiten müssen, reicht Python möglicherweise nicht aus. Hier kommt C++ und sein mächtiger Verbündeter ins Spiel – WebAssembly (WASM).

\n\n

Kompilierung von C++ zu WASM und Aufruf aus TypeScript

\n

Angenommen, wir haben eine einfache C++-Funktion, die die Matrixmultiplikation beschleunigt:

\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                

Blogs

Buchempfehlungen