TypeScript dan Python sama-sama bahasa tingkat tinggi dengan garbage collection, fungsi sebagai first-class value, dan ekosistem package yang besar. Perbedaan utamanya ada pada tipe: tipe TypeScript diperiksa compiler sebelum program berjalan, sedangkan type hint Python adalah anotasi opsional yang diabaikan interpreter. Keduanya juga berjalan di engine yang berbeda dan mendominasi jenis software yang berbeda: TypeScript di web, Python di pekerjaan data dan scripting.
Ini sebuah program kecil di TypeScript. Tekan Jalankan:
Output:
162.25
[ 'Ada', 'Grace', 'Linus' ]
Program yang sama di Python, dengan type hint:
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']
Bentuknya mirip: sebuah tipe untuk record, sebuah fungsi dengan parameter bertipe, sebuah list nilai. Perbedaan yang terlihat adalah sintaksnya (kurung kurawal dan titik koma lawan indentasi), interface lawan @dataclass, dan arrow function dengan filter/reduce lawan generator expression.
Sekilas TypeScript vs Python
| TypeScript | Python | |
|---|---|---|
| Tipe | Statis, diperiksa saat kompilasi; tipe dihapus saat runtime | Dinamis; type hint opsional, tidak diberlakukan saat runtime |
| Pemeriksa tipe | tsc, bagian dari bahasanya | Tool terpisah: mypy, pyright, dan lainnya |
| Berjalan di | Engine JavaScript: browser, Node.js, Deno, Bun | CPython (interpreter standar), PyPy, dan lainnya |
| Eksekusi | Dikompilasi menjadi JavaScript, lalu dikompilasi JIT oleh engine | Bytecode yang diinterpretasi di CPython |
| Blok | Kurung kurawal { } | Indentasi |
| Angka | number (float 64-bit) dan bigint | int (ukuran berapa pun) dan float |
| Konkurensi | Satu thread per event loop, async/await; worker untuk pekerjaan paralel | asyncio, thread, multiprocessing |
| Package manager | npm, pnpm, Yarn, Bun | pip, uv, Poetry |
| Paling kuat di | Front end web, back end Node.js, aplikasi full-stack | Data science, machine learning, scripting, otomatisasi, back end |
Sintaks Berdampingan
Kalau kamu sudah tahu type hint Python, sebagian besar anotasi TypeScript punya padanan langsung:
| 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> atau Map<string, number> |
tuple[int, str] | [number, string] |
str | None | string | null atau string | undefined |
Literal["asc", "desc"] | "asc" | "desc" |
Callable[[int], str] | (n: number) => string |
TypedDict | interface atau type |
@dataclass | sebuah class, atau interface untuk data biasa |
Any | any |
None, True, False | null (atau undefined), true, false |
and, or, not | &&, ||, ! |
f"Hello {name}" | `Hello ${name}` |
Tipe Statis vs Type Hint
Kedua bahasa memungkinkan kamu menulis anotasi yang sama, a: number atau a: int. Yang terjadi selanjutnya berbeda.
Di TypeScript, compiler memeriksa setiap pemanggilan sebelum apa pun berjalan. Argumen yang salah menghentikan build:
index.ts(7,17): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.
Di Python, hint hanyalah metadata. Interpreter tetap menjalankan pemanggilan itu dan mengembalikan string:
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
Pemeriksaan adalah langkah terpisah dengan tool seperti 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)
Jadi tipe di Python memang dirancang bertahap (gradual): kode tanpa anotasi tidak diperiksa sama sekali, dan kamu menambahkan hint di tempat yang membantu. TypeScript juga bisa longgar (any mematikan pemeriksaan untuk sebuah nilai), tetapi dengan strict aktif, yang merupakan default, parameter tanpa anotasi adalah error, bukan dibiarkan lolos.
Satu hal yang sama di keduanya: tidak ada yang memeriksa tipe saat program berjalan. TypeScript menghapus tipenya, dan Python mengabaikan hint-nya. Data yang datang saat runtime, seperti JSON dari API, perlu divalidasi di kedua bahasa (library seperti Zod di TypeScript dan Pydantic di Python melakukannya dari sebuah schema).
Angka Berperilaku Berbeda
TypeScript memakai angka JavaScript: number adalah nilai floating-point 64-bit untuk bilangan bulat maupun pecahan, dan bigint adalah tipe terpisah untuk bilangan bulat besar. int di Python bisa membesar ke ukuran berapa pun dengan sendirinya.
Output:
0.30000000000000004
9007199254740992
3.5 3
1267650600228229401496703205376n
Python mencetak 9007199254740993 untuk 2**53 + 1, karena bilangan bulatnya selalu tepat berapa pun ukurannya, dan Python punya operator khusus untuk pembagian bilangan bulat, 7 // 2, yang menghasilkan 3. Tidak ada tipe int di TypeScript; bilangan bulat adalah number yang kebetulan tidak punya pecahan.
Runtime dan Performa
TypeScript berjalan sebagai JavaScript. V8 (di Chrome dan Node.js), JavaScriptCore (di Safari dan Bun), dan SpiderMonkey (di Firefox) mengompilasi kode yang sering dijalankan menjadi kode mesin selama berjalan, jadi perulangan yang padat di TypeScript biasanya jauh lebih cepat daripada perulangan yang sama di CPython, yang mengeksekusi bytecode.
Selisih itu tidak sepenting kedengarannya untuk banyak program:
- Library numerik dan machine learning Python (NumPy, pandas, PyTorch) melakukan pekerjaan beratnya di kode C, C++, atau CUDA yang sudah dikompilasi, jadi program Python yang memanggilnya tidak menjalankan perulangan intinya di Python.
- Web server di kedua bahasa menghabiskan banyak waktunya untuk menunggu database dan jaringan.
Kedua bahasa memakai satu thread utama untuk sebagian besar kode. TypeScript di Node.js menangani konkurensi dengan event loop dan async/await, dan memakai worker thread untuk pekerjaan CPU yang paralel. Python punya asyncio untuk gaya konkurensi yang sama, ditambah thread dan proses.
Ekosistem dan Kegunaan
TypeScript adalah pilihan default untuk:
- Front end web: React, Angular, Vue, dan Svelte semuanya mendukungnya, dan TypeScript dikompilasi menjadi JavaScript yang dijalankan browser.
- Kode server di Node.js, Deno, dan Bun: API dengan Express, Fastify, NestJS, atau Hono.
- Aplikasi full-stack yang server dan browser-nya berbagi definisi tipe, seperti proyek Next.js.
- Tooling, tool command line, dan aplikasi desktop dengan Electron.
Python adalah pilihan default untuk:
- Analisis dan visualisasi data (pandas, NumPy, Matplotlib, notebook Jupyter).
- Machine learning dan AI (PyTorch, scikit-learn, dan sebagian besar kode pelatihan model).
- Scripting dan otomatisasi: pemrosesan file, administrasi sistem, kode perekat.
- Back end web dengan Django, Flask, atau FastAPI.
- Komputasi ilmiah dan pengajaran.
Pengembangan back end web adalah tempat keduanya paling banyak beririsan. Tim sering memilih berdasarkan apa yang dipakai di bagian lain stack-nya: TypeScript untuk berbagi kode dengan front end TypeScript, Python untuk berdampingan dengan kode data dan ML.
Mana yang Sebaiknya Kamu Pelajari?
- Membangun untuk web? Pelajari JavaScript, lalu TypeScript. Semua yang berjalan di browser pada akhirnya adalah JavaScript, dan TypeScript adalah cara sebagian besar kode front end profesional ditulis.
- Bekerja dengan data, AI, atau otomatisasi? Pelajari Python. Library-nya di bidang itu tidak punya padanan yang sebanding di dunia JavaScript.
- Bahasa pertama, tanpa tujuan pasti? Python punya lebih sedikit sintaks yang harus dipelajari sebelum kamu bisa menulis program yang berguna. TypeScript menambahkan sistem tipe di atas JavaScript, yang menambah materi belajar di awal dan terbayar ketika program makin besar.
Banyak developer memakai keduanya: Python untuk data dan script, TypeScript untuk kode web produknya. Kalau kamu sudah tahu type hint Python, anotasi TypeScript akan terasa familier; bagian barunya adalah compiler memberlakukannya secara default, dan runtime di bawahnya adalah JavaScript.
Pertanyaan yang sering diajukan
Apakah TypeScript lebih baik daripada Python?
Secara umum tidak ada yang lebih baik; keduanya unggul di bidang yang berbeda. TypeScript adalah pilihan standar untuk front end web dan umum dipakai untuk server Node.js, dan pemeriksaan tipenya sudah menjadi bagian dari alur kerja biasa. Python unggul di data science, machine learning, scripting, dan otomatisasi, serta punya type hint yang bisa kamu periksa dengan tool seperti mypy atau pyright.
Apakah TypeScript lebih cepat daripada Python?
Untuk kode yang berat di CPU dan ditulis dengan bahasa itu sendiri, biasanya ya: TypeScript dikompilasi menjadi JavaScript, yang oleh engine seperti V8 dikompilasi menjadi kode mesin saat runtime, sedangkan interpreter Python standar, CPython, menjalankan bytecode. Program Python yang menghabiskan waktunya di library yang ditulis dengan C (NumPy, pandas, PyTorch) tidak terbatas oleh hal itu, dan untuk server yang banyak menunggu jaringan, perbedaannya sering kecil.
Apakah Python punya tipe statis seperti TypeScript?
Python punya type hint opsional (def add(a: int, b: int) -> int), tetapi interpreter tidak memberlakukannya: add("2", "3") tetap berjalan dan mengembalikan "23". Pemeriksa terpisah seperti mypy atau pyright yang melaporkan ketidakcocokan itu. Di TypeScript, pemeriksaan adalah tugas utama compiler, dan proyek biasanya diatur supaya kode dengan error tipe tidak bisa di-build.
Sebaiknya belajar TypeScript atau Python dulu?
Pilih berdasarkan apa yang ingin kamu buat. Untuk website dan aplikasi web, pelajari JavaScript lalu TypeScript, karena browser hanya menjalankan JavaScript. Untuk analisis data, machine learning, otomatisasi, atau bahasa pertama dengan sintaks yang sangat sedikit, mulailah dengan Python. Konsep intinya (variabel, fungsi, perulangan, object) tetap berlaku di keduanya.