TypeScript 作为粘合剂:与 Python、C++ 和 Go 的集成

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

为什么 TypeScript 不能孤立存在?

\n

当我们用 TypeScript 编写代码时,我们习惯了它的严格性、自动补全和泛型。但迟早每个开发者都会面临一个问题:"如果我要调用 Python、C++ 或 Go 的代码怎么办?" 难道要重写整个项目吗?

\n

好消息是:TypeScript 并非一座孤岛。它可以通过 原生模块、WebAssembly、gRPC 甚至普通的 HTTP 桥接 与其他语言友好协作。在本文中,我们将探讨 TypeScript 与其他语言集成的三种真实场景。您将了解如何将前端、后端和高性能计算粘合在一个技术栈中。

\n\n

场景 1:TypeScript + Python —— 数据科学如虎添翼

\n

Python 是机器学习和数据分析的王者。但它的弱点是 Web 界面。而 TypeScript 在浏览器和服务器端都表现出色。将两者的优势结合起来是合乎逻辑的。

\n\n

方法 A:HTTP 微服务(最简单)

\n

最直接的方法是启动一个 Python 服务器(例如 FastAPI),然后通过 fetch 从 TypeScript 调用它。

\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('预测错误');\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。这对于一次性任务很方便——如图像处理、报告生成。

\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 错误: ${stderr}`);\n    return stdout.trim();\n}\n\n// 示例:将 JSON 传递给 Python\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\n

将 C++ 编译为 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                

博客

书籍推荐