TypeScript comme colle : intégration avec Python, C++ et Go

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Pourquoi TypeScript ne vit-il pas dans un vase clos ?

\n

Quand nous écrivons en TypeScript, nous nous habituons à sa rigueur, à l'autocomplétion et aux génériques. Mais tôt ou tard, chaque développeur se pose la question : "Et si j'ai besoin d'appeler du code Python, C++ ou Go ?". Faut-il réécrire tout le projet ?

\n

Bonne nouvelle : TypeScript n'est pas une île isolée. Il sait collaborer avec d'autres langages via les modules natifs, WebAssembly, gRPC et même les ponts HTTP classiques. Dans cet article, nous allons analyser trois scénarios concrets d'intégration de TypeScript avec d'autres langages. Vous apprendrez comment lier le frontend, le backend et les calculs haute performance dans une même pile.

\n\n

Scénario 1 : TypeScript + Python — la data science sous stéroïdes

\n

Python est le roi de l'apprentissage automatique et de l'analyse de données. Mais sa faiblesse réside dans les interfaces web. TypeScript, en revanche, fonctionne brillamment dans le navigateur et sur le serveur. Il est logique de combiner leurs forces.

\n\n

Méthode A : Microservice HTTP (la plus simple)

\n

La voie la plus évidente est de lancer un serveur Python (par exemple, FastAPI) et de l'appeler depuis TypeScript via fetch.

\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('Erreur de prédiction');\n    \n    const data: PredictionResponse = await response.json();\n    return data.prediction;\n}\n\n// Utilisation\ngetPrediction([1.2, 3.4, 5.6])\n    .then(pred => console.log('Résultat :', pred))\n    .catch(err => console.error(err));\n
\n\n

Méthode B : Scripts Python via child_process (pour le backend)

\n

Si vous n'avez pas besoin d'un serveur séparé, vous pouvez exécuter Python directement depuis Node.js. C'est pratique pour des tâches ponctuelles — traitement d'images, génération de rapports.

\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(`Erreur Python : ${stderr}`);\n    return stdout.trim();\n}\n\n// Exemple : transmission de JSON à Python\nconst result = await runPythonScript('./analyze.py', ['--data', '{"value": 42}']);\nconsole.log('Python a répondu :', result);\n
\n

Important : cette approche est plus lente qu'un microservice, mais ne nécessite pas la configuration d'un serveur séparé. Elle convient aux prototypes et aux CI/CD.

\n\n

Scénario 2 : TypeScript + C++ — la vitesse à la limite de la fantaisie

\n

Quand il faut traiter de la vidéo, de l'audio ou de la cryptographie, Python peut ne pas suffire. C'est là qu'interviennent le C++ et son puissant allié — WebAssembly (WASM).

\n\n

Compilation du C++ en WASM et appel depuis TypeScript

\n

Supposons que nous ayons une simple fonction en C++ qui accélère la multiplication de matrices :

\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

Book Recommendations