TypeScript und Python sind beide Hochsprachen mit Garbage Collection, Funktionen als vollwertigen Werten und großen Paket-Ökosystemen. Der Hauptunterschied ist die Typisierung: Die Typen von TypeScript prüft der Compiler, bevor das Programm läuft, und die Type Hints von Python sind optionale Annotationen, die der Interpreter ignoriert. Außerdem laufen sie auf unterschiedlichen Engines und dominieren unterschiedliche Arten von Software: TypeScript das Web, Python die Arbeit mit Daten und Skripte.
Hier ein kleines Programm in TypeScript. Klick auf Run:
Ausgabe:
162.25
[ 'Ada', 'Grace', 'Linus' ]
Dasselbe Programm in Python, mit Type Hints:
from dataclasses import dataclass
@dataclass
class Order:
customer: str
amount: float
paid: bool
def total_paid(orders: list[Order]) -> float:
return sum(o.amount for o in orders if o.paid)
orders = [
Order("Ada", 120.0, True),
Order("Grace", 80.5, False),
Order("Linus", 42.25, True),
]
by_amount = [o.customer for o in sorted(orders, key=lambda o: o.amount, reverse=True)]
print(total_paid(orders))
print(by_amount)
162.25
['Ada', 'Grace', 'Linus']
Der Aufbau ist ähnlich: ein Typ für den Datensatz, eine Funktion mit typisierten Parametern, eine Liste von Werten. Die sichtbaren Unterschiede sind die Syntax (geschweifte Klammern und Semikolons gegenüber Einrückung), interface gegenüber einer @dataclass und Arrow Functions mit filter/reduce gegenüber einem Generatorausdruck.
TypeScript vs Python im Überblick
| TypeScript | Python | |
|---|---|---|
| Typisierung | Statisch, beim Kompilieren geprüft; Typen werden zur Laufzeit entfernt | Dynamisch; optionale Type Hints, zur Laufzeit nicht durchgesetzt |
| Type Checker | tsc, Teil der Sprache | Separate Tools: mypy, pyright und andere |
| Läuft auf | JavaScript-Engines: Browser, Node.js, Deno, Bun | CPython (der Standard-Interpreter), PyPy und andere |
| Ausführung | Zu JavaScript kompiliert, dann von der Engine per JIT kompiliert | Interpretierter Bytecode in CPython |
| Blöcke | Geschweifte Klammern { } | Einrückung |
| Zahlen | number (64-Bit-Float) und bigint | int (beliebig groß) und float |
| Nebenläufigkeit | Ein Thread pro Event Loop, async/await; Worker für parallele Arbeit | asyncio, Threads, Multiprocessing |
| Paketmanager | npm, pnpm, Yarn, Bun | pip, uv, Poetry |
| Am stärksten bei | Web-Frontends, Node.js-Backends, Full-Stack-Apps | Data Science, Machine Learning, Skripte, Automatisierung, Backends |
Syntax im direkten Vergleich
Wenn du die Type Hints von Python kennst, haben die meisten TypeScript-Annotationen ein direktes Gegenstück:
| Python | TypeScript |
|---|---|
count: int = 0 | let count: number = 0; |
def add(a: int, b: int) -> int: | function add(a: number, b: number): number { |
lambda x: x * 2 | (x) => x * 2 |
list[str] | string[] |
dict[str, int] | Record<string, number> oder Map<string, number> |
tuple[int, str] | [number, string] |
str | None | string | null oder string | undefined |
Literal["asc", "desc"] | "asc" | "desc" |
Callable[[int], str] | (n: number) => string |
TypedDict | interface oder type |
@dataclass | eine class, oder ein interface für reine Daten |
Any | any |
None, True, False | null (oder undefined), true, false |
and, or, not | &&, ||, ! |
f"Hello {name}" | `Hello ${name}` |
Statische Typen vs Type Hints
In beiden Sprachen kannst du dieselbe Annotation schreiben, a: number oder a: int. Was danach passiert, ist verschieden.
In TypeScript prüft der Compiler jeden Aufruf, bevor irgendetwas läuft. Ein falsches Argument stoppt den Build:
index.ts(7,17): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.
In Python sind die Hints Metadaten. Der Interpreter führt den Aufruf aus und gibt einen String zurück:
def add(a: int, b: int) -> int:
return a + b
print(add(2, 3)) # 5
print(add("2", "3")) # 23, the hints are not enforced
Die Prüfung ist ein eigener Schritt mit einem Tool wie mypy:
$ mypy hints.py
hints.py:6: error: Argument 1 to "add" has incompatible type "str"; expected "int" [arg-type]
hints.py:6: error: Argument 2 to "add" has incompatible type "str"; expected "int" [arg-type]
Found 2 errors in 1 file (checked 1 source file)
Die Typisierung in Python ist also bewusst graduell: Code ohne Annotationen wird einfach nicht geprüft, und du ergänzt Hints dort, wo sie helfen. TypeScript kann auch locker sein (any schaltet die Prüfung für einen Wert ab), aber mit eingeschaltetem strict, dem Standard, ist ein Parameter ohne Annotation ein Fehler und kein Freifahrtschein.
Eines haben beide gemeinsam: Keine der beiden prüft Typen, während das Programm läuft. TypeScript entfernt seine Typen, und Python ignoriert seine Hints. Daten, die zur Laufzeit ankommen, etwa JSON von einer API, müssen in beiden Sprachen validiert werden (Bibliotheken wie Zod in TypeScript und Pydantic in Python erledigen das anhand eines Schemas).
Zahlen verhalten sich unterschiedlich
TypeScript hat die Zahlen von JavaScript: number ist ein 64-Bit-Gleitkommawert für ganze Zahlen und Brüche, und bigint ist ein eigener Typ für große ganze Zahlen. Das int von Python wächst von selbst auf jede Größe.
Ausgabe:
0.30000000000000004
9007199254740992
3.5 3
1267650600228229401496703205376n
Python gibt für 2**53 + 1 den Wert 9007199254740993 aus, weil seine ganzen Zahlen in jeder Größe exakt sind, und es hat einen eigenen Operator für ganzzahlige Division, 7 // 2, der 3 ergibt. In TypeScript gibt es keinen int-Typ; eine ganze Zahl ist ein number, das zufällig keinen Nachkommaanteil hat.
Laufzeit und Performance
TypeScript läuft als JavaScript. V8 (in Chrome und Node.js), JavaScriptCore (in Safari und Bun) und SpiderMonkey (in Firefox) kompilieren häufig ausgeführten Code während der Laufzeit in Maschinencode, also sind enge Schleifen in TypeScript meist deutlich schneller als dieselben Schleifen in CPython, das Bytecode ausführt.
Für viele Programme spielt dieser Abstand weniger eine Rolle, als es klingt:
- Die Bibliotheken von Python für Numerik und Machine Learning (NumPy, pandas, PyTorch) erledigen die schwere Arbeit in kompiliertem C-, C++- oder CUDA-Code. Ein Python-Programm, das sie aufruft, führt seine inneren Schleifen also nicht in Python aus.
- Webserver verbringen in beiden Sprachen viel Zeit mit Warten auf Datenbanken und Netzwerke.
Beide Sprachen nutzen für den meisten Code einen Hauptthread. TypeScript auf Node.js regelt Nebenläufigkeit mit einer Event Loop und async/await und nutzt Worker Threads für parallele Rechenarbeit. Python hat asyncio für denselben Stil der Nebenläufigkeit, dazu Threads und Prozesse.
Ökosysteme und Einsatzgebiete
TypeScript ist der Standard für:
- Web-Frontends: React, Angular, Vue und Svelte unterstützen es alle, und es wird zu dem JavaScript kompiliert, das Browser ausführen.
- Servercode auf Node.js, Deno und Bun: APIs mit Express, Fastify, NestJS oder Hono.
- Full-Stack-Apps, in denen Server und Browser Typdefinitionen teilen, etwa Next.js-Projekte.
- Tooling, Kommandozeilen-Tools und Desktop-Apps mit Electron.
Python ist der Standard für:
- Datenanalyse und Visualisierung (pandas, NumPy, Matplotlib, Jupyter Notebooks).
- Machine Learning und KI (PyTorch, scikit-learn und der Großteil des Codes zum Trainieren von Modellen).
- Skripte und Automatisierung: Dateiverarbeitung, Systemadministration, Glue Code.
- Web-Backends mit Django, Flask oder FastAPI.
- Wissenschaftliches Rechnen und Lehre.
Die Backend-Webentwicklung ist der Bereich, in dem sie sich am meisten überschneiden. Teams wählen oft nach dem Rest des Stacks: TypeScript, um Code mit einem TypeScript-Frontend zu teilen, Python, um neben Daten- und ML-Code zu stehen.
Welche Sprache solltest du lernen?
- Du baust für das Web? Lerne JavaScript und dann TypeScript. Alles, was im Browser läuft, ist am Ende JavaScript, und TypeScript ist die Sprache, in der der meiste professionelle Frontend-Code geschrieben wird.
- Du arbeitest mit Daten, KI oder Automatisierung? Lerne Python. Seine Bibliotheken in diesen Bereichen haben in der JavaScript-Welt kein echtes Gegenstück.
- Erste Sprache, kein festes Ziel? Bei Python musst du weniger Syntax lernen, bevor du nützliche Programme schreiben kannst. TypeScript legt ein Typsystem über JavaScript, das am Anfang zusätzlichen Lernaufwand bedeutet und sich auszahlt, wenn Programme wachsen.
Viele Entwickler nutzen beide: Python für Daten und Skripte, TypeScript für den Webcode des Produkts. Wenn du die Type Hints von Python schon kennst, werden dir die Annotationen von TypeScript vertraut vorkommen; neu ist, dass der Compiler sie standardmäßig durchsetzt und dass darunter JavaScript als Laufzeit liegt.
Häufig gestellte Fragen
Ist TypeScript besser als Python?
Keine der beiden ist allgemein besser; sie führen in verschiedenen Bereichen. TypeScript ist die Standardwahl für Web-Frontends und verbreitet für Node.js-Server, und seine Typprüfung ist fest in den normalen Arbeitsablauf eingebaut. Python führt bei Data Science, Machine Learning, Skripten und Automatisierung und hat Type Hints, die du mit Tools wie mypy oder pyright prüfen kannst.
Ist TypeScript schneller als Python?
Bei rechenintensivem Code, der in der Sprache selbst geschrieben ist, meist ja: TypeScript wird zu JavaScript kompiliert, das Engines wie V8 zur Laufzeit in Maschinencode übersetzen, während der Standard-Interpreter von Python, CPython, Bytecode ausführt. Python-Programme, die ihre Zeit in Bibliotheken aus C verbringen (NumPy, pandas, PyTorch), sind davon nicht begrenzt, und bei netzwerklastigen Servern ist der Unterschied oft klein.
Hat Python statische Typisierung wie TypeScript?
Python hat optionale Type Hints (def add(a: int, b: int) -> int), aber der Interpreter setzt sie nicht durch: add("2", "3") läuft und gibt "23" zurück. Ein separater Checker wie mypy oder pyright meldet den Widerspruch. In TypeScript ist die Prüfung die Hauptaufgabe des Compilers, und Projekte sind normalerweise so eingerichtet, dass Code mit Typfehlern nicht gebaut wird.
Sollte ich zuerst TypeScript oder Python lernen?
Entscheide nach dem, was du bauen willst. Für Websites und Web-Apps lernst du JavaScript und dann TypeScript, weil Browser nur JavaScript ausführen. Für Datenanalyse, Machine Learning, Automatisierung oder eine erste Sprache mit sehr wenig Syntax fängst du mit Python an. Die Grundideen (Variablen, Funktionen, Schleifen, Objekte) lassen sich in beide Richtungen übertragen.