Salvo

WFN Üye
Konular
1,725
Mesajlar
1,747
Çözüm
0
Ticaret Puanı
0
Üyelik
6 Ay 16 Gün
Konum
İstanbul
Web Sitesi
Yok
Alanı
Belirtmemiş
1/1
Konu sahibi
İlk olarak proje klasöründe TypeScript’i geliştirme bağımlılığı olarak kurun, ardından tsconfig.json oluşturup kaynak dosyalarınızı src altında .ts uzantısıyla tutun. tsc komutu TypeScript kodunu JavaScript’e derler; Node.js ise çalıştırma sırasında dist klasöründeki JavaScript dosyalarını kullanır. Böylece tür denetimi geliştirme aşamasında yapılır, üretimde çalıştırılan dosyalar Node.js’in doğrudan anlayabildiği JavaScript olur. Modern Node.js projelerinde modül ayarını Node’un çalışma biçimiyle eşleştirmek için nodenext kullanmak uygun başlangıçtır.

Mevcut projeyi TypeScript’e hazırlama​


Önce projenin kök klasöründe bir terminal açın. Klasörde henüz package.json yoksa npm init -y komutuyla oluşturun. Daha sonra TypeScript derleyicisini ve Node.js tür tanımlarını geliştirme bağımlılığı olarak yükleyin:

Bash:
npm install --save-dev typescript @types/node

typescript derleyiciyi, @types/node ise process, Buffer, fs ve Node.js’e özgü diğer API’lerin tür bilgilerini sağlar. Projenizde Express gibi başka bir kütüphane kullanıyorsanız, o kütüphanenin ayrı tür paketine ihtiyaç duyup duymadığını ilgili paketin belgelerine göre değerlendirin.

Ardından temel yapılandırma dosyasını oluşturun:

Bash:
npx tsc --init

Bu komut kök klasörde tsconfig.json dosyası üretir. Dosyayı proje yapınıza göre sadeleştirip aşağıdaki hâle getirebilirsiniz:

JSON:
{
  "compilerOptions": {
    "target": "es2022",
    "module": "nodenext",
    "moduleResolution": "nodenext",
    "rootDir": "src",
    "outDir": "dist",
    "strict": true,
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true,
    "skipLibCheck": true
  },
  "include": ["src/**/*.ts"],
  "exclude": ["node_modules", "dist"]
}

rootDir, TypeScript kaynaklarının bulunduğu klasörü; outDir ise derlenmiş JavaScript dosyalarının yazılacağı klasörü belirtir. strict: true, tür denetimini daha sıkı yapar. module ve moduleResolution ayarlarını modern Node.js projelerinde birbiriyle uyumlu tutmak önemlidir; nodenext kullanıldığında TypeScript, Node.js’in ESM ve CommonJS kurallarını dikkate alır.

İlk TypeScript dosyasını oluşturma​


Proje kökünde src klasörü oluşturun ve içine index.ts dosyası ekleyin. Aşağıdaki örnekte greet fonksiyonu yalnızca metin kabul eder ve yine metin döndürür:

Kod:
type User = {
  name: string;
};

function greet(user: User): string {
  return `Merhaba, ${user.name}!`;
}

const user: User = { name: "Ayşe" };

console.log(greet(user));

Bu dosyanın çalışması için önce derleme komutunu yürütün:

Bash:
npx tsc

Hata yoksa dist/index.js dosyası oluşur. Bu, TypeScript’in kaynak dosyayı JavaScript’e çevirdiğini gösterir; ancak tek başına uygulamanın başarıyla çalıştığını kanıtlamaz. Çalışma sonucunu ayrıca Node.js ile kontrol edin:

Bash:
node dist/index.js

Beklenen çıktı şuna benzer:

Kod:
Merhaba, Ayşe!

user nesnesine name yerine sayı verirseniz veya greet fonksiyonuna yanlış türde değer gönderirseniz npx tsc hata bildirir. Bu hata, uygulama çalıştırılmadan önce yakalanan bir tür uyuşmazlığıdır; TypeScript’in çalışma zamanındaki tüm hataları önlediği anlamına gelmez. Örneğin bir API’den gelen verinin gerçekten beklenen biçimde olup olmadığını ayrıca doğrulamanız gerekir.

Derleme ve çalıştırma komutlarını package.json’a ekleme​


Her seferinde uzun komutlar yazmamak için package.json içindeki scripts alanını aşağıdaki gibi düzenleyin:

JSON:
{
  "scripts": {
    "build": "tsc",
    "typecheck": "tsc --noEmit",
    "start": "node dist/index.js"
  }
}

Bu komutların görevleri farklıdır:
  • npm run build, TypeScript dosyalarını dist klasörüne JavaScript olarak derler.
  • npm run typecheck, JavaScript üretmeden yalnızca tür denetimi yapar.
  • npm start, daha önce oluşturulmuş dist/index.js dosyasını Node.js ile çalıştırır.
Üretimden önce genellikle önce npm run typecheck, sonra npm run build ve son olarak npm start çalıştırılır. typecheck başarılı olduğu hâlde npm start sırasında hata alırsanız sorun artık temel tür denetiminden çok çalışma zamanı, dosya yolu, ortam değişkeni veya modül uyumluluğu ile ilgilidir.

ESM ve CommonJS seçimini doğru yapmak​


nodenext kullanırken Node.js’in modül biçimi, package.json içindeki type alanına ve dosya uzantılarına göre belirlenir. Projeyi ESM olarak kullanmak istiyorsanız package.json içine şu alanı ekleyin:

JSON:
{
  "type": "module"
}

Bu durumda normal .ts dosyaları ESM kurallarına göre değerlendirilir. Göreli importlarda Node.js’in beklediği dosya uzantılarını dikkate alın. CommonJS kullanmak istiyorsanız type alanını eklemeyebilir veya proje düzeninizi CommonJS kurallarına göre sürdürebilirsiniz. Karar verirken mevcut kodunuzdaki require/module.exports kullanımı, kullandığınız paketlerin modül biçimi ve dağıtım ortamı birlikte değerlendirilmelidir. module değerini rastgele esnext veya commonjs yapmak yerine Node.js için node16, node18, node20 ya da nodenext seçeneklerinden Node sürümünüz ve proje hedefinizle uyumlu olanı seçin.

Yapının son hâli ve kontrol​


Basit bir proje sonunda klasör yapısı yaklaşık olarak şöyle görünür:

Kod:
proje/
├─ src/
│  └─ index.ts
├─ dist/
│  └─ index.js
├─ package.json
├─ package-lock.json
└─ tsconfig.json

dist klasörü derleme sonucunda oluşur ve genellikle kaynak kod değildir; bu nedenle sürüm kontrolünde çoğu projede .gitignore içine eklenir. src içindeki .ts dosyaları değiştirdikten sonra npm run typecheck ile tür hatalarını, npm run build ile derlemeyi ve npm start ile gerçek JavaScript çıktısının çalışmasını ayrı ayrı kontrol edin.

Node.js’in bazı güncel sürümleri yalnızca tür açıklamaları gibi çalışma zamanında silinebilen TypeScript sözdizimini doğrudan çalıştırabilir. Ancak bu yöntem tür denetimi yapmaz ve tüm TypeScript özelliklerini dönüştürmez. Projenin düzenli derleme çıktısına, tsconfig.json ayarlarına ve tam tür kontrolüne ihtiyacı varsa tsc ile derleyip oluşan JavaScript’i çalıştırmak daha öngörülebilir yoldur.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic