Menu

TypeScript vs Python: Tipler, Hız ve Kullanım Alanları

TypeScript ve Python ikisi de yüksek seviyeli, çöp toplayıcılı dillerdir; ama TypeScript tiplerini kod çalışmadan önce kontrol eder, Python'un type hint'leri ise isteğe bağlıdır ve çalışma zamanında yok sayılır. Tipler, çalışma ortamı, hız, ekosistem ve kullanım alanlarının iki dilde aynı programla karşılaştırması.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

TypeScript ve Python, çöp toplama (garbage collection), birinci sınıf fonksiyonlar ve büyük paket ekosistemlerine sahip yüksek seviyeli dillerdir. Asıl fark tiplerdedir: TypeScript'in tipleri program çalışmadan önce derleyici tarafından kontrol edilir, Python'un type hint'leri ise yorumlayıcının yok saydığı isteğe bağlı notasyonlardır. Ayrıca farklı motorlarda çalışırlar ve farklı yazılım türlerine hakimdirler: TypeScript web'e, Python veri işleri ve betiklere.

İşte TypeScript ile küçük bir program. Run'a basın:

Çıktı:

162.25
[ 'Ada', 'Grace', 'Linus' ]

Aynı program, type hint'lerle Python'da:

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']

Yapı birbirine yakın: kayıt için bir tip, tipli parametrelere sahip bir fonksiyon, bir değer listesi. Görünen farklar sözdizimi (girintiye karşı süslü parantezler ve noktalı virgüller), @dataclass'a karşı interface ve bir generator ifadesine karşı filter/reduce ile arrow function'lardır.

Bir Bakışta TypeScript vs Python

TypeScriptPython
TiplerStatik, derleme zamanında kontrol edilir; tipler çalışma zamanında silinirDinamik; isteğe bağlı type hint'ler, çalışma zamanında zorlanmaz
Tip denetleyicisitsc, dilin parçasıAyrı araçlar: mypy, pyright ve diğerleri
Nerede çalışırJavaScript motorları: tarayıcılar, Node.js, Deno, BunCPython (standart yorumlayıcı), PyPy ve diğerleri
ÇalıştırmaJavaScript'e derlenir, sonra motor tarafından JIT ile derlenirCPython'da yorumlanan bytecode
BloklarSüslü parantezler { }Girinti
Sayılarnumber (64 bit float) ve bigintint (her boyutta) ve float
EşzamanlılıkEvent loop başına bir thread, async/await; paralel iş için worker'larasyncio, thread'ler, multiprocessing
Paket yöneticisinpm, pnpm, Yarn, Bunpip, uv, Poetry
En güçlü olduğu alanWeb arayüzleri, Node.js backend'leri, full-stack uygulamalarVeri bilimi, makine öğrenmesi, betikler, otomasyon, backend'ler

Yan Yana Sözdizimi

Python'un type hint'lerini biliyorsanız, çoğu TypeScript notasyonunun doğrudan bir karşılığı vardır:

PythonTypeScript
count: int = 0let 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> veya Map<string, number>
tuple[int, str][number, string]
str | Nonestring | null veya string | undefined
Literal["asc", "desc"]"asc" | "desc"
Callable[[int], str](n: number) => string
TypedDictinterface veya type
@dataclassbir class ya da düz veri için bir interface
Anyany
None, True, Falsenull (veya undefined), true, false
and, or, not&&, ||, !
f"Hello {name}"`Hello ${name}`

Statik Tipler ve Type Hint'ler

İki dil de aynı notasyonu yazmanıza izin verir: a: number ya da a: int. Sonrasında olanlar farklıdır.

TypeScript'te derleyici, hiçbir şey çalışmadan önce her çağrıyı kontrol eder. Yanlış bir argüman derlemeyi durdurur:

index.ts(7,17): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.

Python'da hint'ler meta veridir. Yorumlayıcı çağrıyı çalıştırır ve bir string döndürür:

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

Kontrol, mypy gibi bir araçla yapılan ayrı bir adımdır:

$ 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)

Yani Python'da tipler tasarım gereği kademelidir (gradual): notasyonsuz kod basitçe kontrol edilmez ve hint'leri yardımcı oldukları yerlere eklersiniz. TypeScript de gevşek olabilir (any bir değer için kontrolü kapatır), ama varsayılan olan strict açıkken notasyonsuz bir parametre serbest geçiş değil, bir hatadır.

İkisinin ortak bir yanı var: hiçbiri program çalışırken tipleri kontrol etmez. TypeScript tiplerini siler, Python hint'lerini yok sayar. Çalışma zamanında gelen veriler, örneğin bir API'den gelen JSON, iki dilde de doğrulama ister (TypeScript'te Zod, Python'da Pydantic gibi kütüphaneler bunu bir şemadan yapar).

Sayılar Farklı Davranır

TypeScript'te JavaScript'in sayıları vardır: number hem tam sayılar hem kesirler için 64 bitlik bir kayan nokta değeridir, bigint ise büyük tam sayılar için ayrı bir tiptir. Python'un int tipi ise kendiliğinden her boyuta büyür.

Çıktı:

0.30000000000000004
9007199254740992
3.5 3
1267650600228229401496703205376n

Python 2**53 + 1 için 9007199254740993 yazdırır, çünkü tam sayıları her boyutta kesindir; ayrıca 3 veren 7 // 2 gibi ayrı bir tam sayı bölme operatörü vardır. TypeScript'te int tipi yoktur; tam sayı, kesirli kısmı olmayan bir number değeridir.

Çalışma Ortamı ve Performans

TypeScript, JavaScript olarak çalışır. V8 (Chrome ve Node.js'te), JavaScriptCore (Safari ve Bun'da) ve SpiderMonkey (Firefox'ta) sık çalışan kodu çalışırken makine koduna derler; bu yüzden TypeScript'teki sıkı döngüler, bytecode çalıştıran CPython'daki aynı döngülerden genellikle çok daha hızlıdır.

Bu fark pek çok program için göründüğü kadar önemli değildir:

  • Python'un sayısal ve makine öğrenmesi kütüphaneleri (NumPy, pandas, PyTorch) ağır işlerini derlenmiş C, C++ veya CUDA kodunda yapar; yani onları çağıran bir Python programı iç döngülerini Python'da çalıştırmaz.
  • İki dildeki web sunucuları da zamanlarının büyük kısmını veritabanlarını ve ağları bekleyerek geçirir.

İki dil de çoğu kod için tek bir ana thread kullanır. Node.js üzerindeki TypeScript eşzamanlılığı bir event loop ve async/await ile yönetir, paralel işlemci işleri için worker thread'leri kullanır. Python'da aynı tarz eşzamanlılık için asyncio, ayrıca thread'ler ve process'ler vardır.

Ekosistemler ve Kullanım Alanları

TypeScript şunlar için varsayılandır:

  • Web arayüzleri: React, Angular, Vue ve Svelte'in hepsi destekler ve tarayıcıların çalıştırdığı JavaScript'e derlenir.
  • Node.js, Deno ve Bun üzerindeki sunucu kodu: Express, Fastify, NestJS veya Hono ile API'ler.
  • Next.js projeleri gibi, sunucu ile tarayıcının tip tanımlarını paylaştığı full-stack uygulamalar.
  • Geliştirici araçları, komut satırı araçları ve Electron ile masaüstü uygulamaları.

Python şunlar için varsayılandır:

  • Veri analizi ve görselleştirme (pandas, NumPy, Matplotlib, Jupyter notebook'ları).
  • Makine öğrenmesi ve yapay zeka (PyTorch, scikit-learn ve model eğitim kodunun çoğu).
  • Betik yazma ve otomasyon: dosya işleme, sistem yönetimi, yapıştırıcı kod.
  • Django, Flask veya FastAPI ile web backend'leri.
  • Bilimsel hesaplama ve eğitim.

İkisinin en çok kesiştiği yer backend web geliştirmedir. Ekipler genellikle yığının geri kalanına göre seçer: bir TypeScript arayüzüyle kod paylaşmak için TypeScript, veri ve ML kodunun yanında durmak için Python.

Hangisini Öğrenmelisiniz?

  • Web için mi geliştiriyorsunuz? Önce JavaScript, sonra TypeScript öğrenin. Tarayıcıda çalışan her şey sonunda JavaScript'tir ve profesyonel frontend kodunun çoğu TypeScript ile yazılır.
  • Veri, yapay zeka veya otomasyonla mı çalışıyorsunuz? Python öğrenin. Bu alanlardaki kütüphanelerinin JavaScript dünyasında gerçek bir karşılığı yoktur.
  • İlk dil, belirli bir hedef yok mu? Python'da işe yarar programlar yazabilmek için öğrenilecek sözdizimi daha azdır. TypeScript JavaScript'in üzerine bir tip sistemi ekler; bu başta ekstra öğrenme demektir ama programlar büyüdükçe karşılığını verir.

Pek çok geliştirici ikisini de kullanır: veri ve betikler için Python, ürünün web kodu için TypeScript. Python'un type hint'lerini zaten biliyorsanız TypeScript'in notasyonları size tanıdık gelecektir; yeni olan, derleyicinin onları varsayılan olarak zorlaması ve altta çalışan ortamın JavaScript olmasıdır.

Sıkça Sorulan Sorular

TypeScript, Python'dan daha mı iyi?

Genel olarak ikisi de daha iyi değil; farklı alanlarda öndeler. TypeScript web arayüzleri için standart seçimdir ve Node.js sunucularında yaygındır; tip kontrolü de normal iş akışının içindedir. Python veri bilimi, makine öğrenmesi, betik yazma ve otomasyonda öndedir ve mypy veya pyright gibi araçlarla kontrol edebileceğiniz type hint'lere sahiptir.

TypeScript, Python'dan daha mı hızlı?

Dilin kendisiyle yazılmış, işlemciye yük bindiren kodda genellikle evet: TypeScript JavaScript'e derlenir, V8 gibi motorlar da onu çalışma zamanında makine koduna derler; standart Python yorumlayıcısı CPython ise bytecode çalıştırır. Zamanını C ile yazılmış kütüphanelerde (NumPy, pandas, PyTorch) geçiren Python programları bununla sınırlı değildir ve ağ ağırlıklı sunucularda fark çoğu zaman küçüktür.

Python'da TypeScript gibi statik tipler var mı?

Python'da isteğe bağlı type hint'ler vardır (def add(a: int, b: int) -> int), ama yorumlayıcı onları zorlamaz: add("2", "3") çalışır ve "23" döndürür. Uyuşmazlığı mypy veya pyright gibi ayrı bir denetleyici bildirir. TypeScript'te kontrol derleyicinin asıl işidir ve projeler normalde tip hatası olan kod derlenmeyecek şekilde kurulur.

Önce TypeScript mi, Python mı öğrenmeliyim?

Ne yapmak istediğinize göre seçin. Web siteleri ve web uygulamaları için önce JavaScript, sonra TypeScript öğrenin, çünkü tarayıcılar yalnızca JavaScript çalıştırır. Veri analizi, makine öğrenmesi, otomasyon ya da çok az sözdizimi olan bir ilk dil için Python ile başlayın. Temel fikirler (değişkenler, fonksiyonlar, döngüler, nesneler) her iki durumda da geçerlidir.

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA