Berk Akademi
Ana Sayfa
ÖZEL KODLAMA DERSLERİ
Yazılım Özel Ders
Tüm birebir programlara genel bakış
Python Yazılım Kursu
Sıfırdan ileri seviyeye birebir Python
Java Yazılım Kursu
OOP odaklı birebir Java eğitimi
AP Computer Science Principles
AP CSP sınav hazırlığı
GRUP DERSLERİ
Python & Django Masterclass
SINIRLI KONTENJAN
Java & Spring Boot Masterclass
SINIRLI KONTENJAN
C# .NET Masterclass
SINIRLI KONTENJAN
VİDEO DERSLER
Sıfırdan Temel Python Kursu
Kendi Hızında Öğren
ÜCRETSİZ
Seviye Testi
Ücretsiz — Python, Java, algoritma seviye testleri
Kariyerini Keşfet
Sertifika Doğrula
Belge numarası ve soyad ile doğrulama

TypeScript 6.0 Sonrası tsconfig.json Ayarlarını Anlama ve Derleme Hatalarını Teşhis Etme

typescript-6-sonrasi-tsconfig-json-hatalarini-cozme
Bu yazıda neler var?
  1. Güncelleme Sonrası tsconfig.json Neden İlk Kontrol Noktasıdır?
  2. module ve moduleResolution Birlikte Nasıl Karar Verilir?
  3. Sorunlu ve Düzeltilmiş Örnek Proje Yapısı
  4. strict Modu JavaScript'ten Geçişte Nasıl Kademeli Açılır?
  5. rootDir, src ve tests İlişkisi Nasıl Teşhis Edilir?
  6. types Alanı Global Tip Çakışmalarını Ne Zaman Önler?
  7. Hata Mesajından Ayara Gitmek İçin Teşhis Listesi
  8. Gelecek Sürümlere Hazırlık İçin Kalıcı tsconfig Kontrol Listesi
  9. Sık Sorulan Sorular

TypeScript güncellemesinden sonra oluşan tsconfig.json hatalarını çözmenin en güvenilir yolu, ayarları tek tek rastgele değiştirmek değil; modül sistemi, dosya kapsamı, tip paketleri ve katı tip kontrolünü birlikte incelemektir. Önce projenin ESM mi CommonJS mi çalıştığını, ardından moduleResolution, include/rootDir, types ve strict ayarlarını kontrol edin.

TypeScript 6.0 ile bazı varsayılanlar ve eski seçeneklerin durumu değişti. Bu nedenle daha önce çalışan bir yapılandırma, derleyicinin artık dosyaları veya modülleri farklı yorumlaması sonucunda hata verebilir. Aşağıdaki yaklaşım, hatayı bastırmak yerine hatanın hangi yapılandırma kararından kaynaklandığını bulmayı amaçlar.

Güncelleme Sonrası tsconfig.json Neden İlk Kontrol Noktasıdır?

tsconfig.json, yalnızca derleyicinin birkaç ayarını tutan basit bir dosya değildir. TypeScript’e projenin hangi dosyalardan oluştuğunu, bu dosyaların hangi JavaScript çalışma ortamına göre derleneceğini, hangi tip bildirimlerinin global alana ekleneceğini ve ne kadar katı kontrol uygulanacağını anlatır. Bu ayarlardan biri değiştiğinde, hata mesajı başka bir dosyada görünse bile asıl neden yapılandırmada olabilir.

TypeScript 6.0 sürüm notlarında module varsayılanının esnext olduğu, rootDir varsayılanının tsconfig.json dosyasının bulunduğu dizine bağlandığı ve types varsayılanının boş listeye dönüştüğü belirtiliyor. Aynı belgede eski moduleResolution: "node" yaklaşımının kullanımdan kaldırılmaya hazırlandığı ve classic çözümleme stratejisinin kaldırıldığı açıklanıyor. Bu değişikliklerin tamamı her projeyi etkilemez; ancak güncelleme sonrasında ilk inceleme noktası olarak TypeScript 6.0 resmî sürüm notları kullanılmalıdır.

JavaScript’ten TypeScript’e geçen bir geliştirici için en pratik sıra aşağıdaki gibidir. Her adımda yalnızca değeri değiştirmeyin; bu değerin çalışma ortamınızla gerçekten uyuşup uyuşmadığını sorun:

  1. Modül sistemi: Kod ESM olarak mı çalışıyor, yoksa CommonJS biçiminde mi yükleniyor?
  2. Modül çözümleme: moduleResolution, Node.js’in çalışma biçimine mi yoksa bir bundler’ın davranışına mı uyarlanmış?
  3. Dosya kapsamı: include, exclude ve rootDir aynı proje sınırlarını mı gösteriyor?
  4. Global tipler: types alanı gerçekten gereken tip paketlerini mi içeriyor, yoksa gereksiz test ve ortam tiplerini de mi yüklüyor?
  5. Katı kontrol: Hata yeni bir modül probleminden mi, yoksa strictNullChecks veya başka bir strict alt bayrağından mı kaynaklanıyor?

Bu sıranın önemli olmasının nedeni, ayarların birbirinden bağımsız çalışmamasıdır. Örneğin bir dosyanın import satırı doğru görünse bile TypeScript onu ESM kurallarına göre çözümlüyor olabilir. Benzer şekilde, test dosyası kaynak koduyla birlikte derlenmek isteniyorsa rootDir: "./src" seçimi derleme çıktısının proje sınırları dışına taşmasına yol açabilir.

module ve moduleResolution Birlikte Nasıl Karar Verilir?

module, TypeScript’in üreteceği JavaScript’in modül biçimini belirler. moduleResolution ise import edilen dosya ve paketlerin hangi kurallarla bulunacağını belirler. Kısaca, ilki “çıktıda nasıl import veya require üretilecek?” sorusuna, ikincisi ise “bu import hangi dosyaya ya da paket girişine karşılık geliyor?” sorusuna cevap verir.

Bu nedenle yalnızca bir ayarı değiştirmek çoğu zaman yeterli değildir. Örneğin ESM kullanan bir Node.js projesinde module: "nodenext" ile moduleResolution: "nodenext" birlikte düşünülür. Bundler kullanan bir projede ise module: "preserve" ve moduleResolution: "bundler" daha anlamlı bir çerçeve oluşturabilir. TypeScript’in güncel belgeleri, Node.js hedefleri için node16/nodenext; bundler tabanlı yapılarda ise bundler çözümlemesini ayrı çalışma modelleri olarak açıklar.([typescriptlang.org](https://www.typescriptlang.org/tsconfig/moduleResolution?utm_source=openai))

ESM ve CommonJS kararını verirken hangi bilgiler birlikte okunmalı?

  • package.json içindeki "type": "module" alanı, Node.js’in .js dosyalarını ESM olarak yorumlamasını etkiler.
  • import ve export kullanımı, kaynak kodunun modül yaklaşımı hakkında ipucu verir; ancak tek başına çalışma zamanını kesin olarak belirlemez.
  • .mts ve .cts gibi uzantılar, ESM ve CommonJS niyetini dosya seviyesinde açıkça ifade etmek için kullanılabilir.
  • Node.js doğrudan çalıştırılıyorsa paket girişleri, dosya uzantıları ve exports alanı dikkate alınmalıdır.
  • Bir bundler kullanılıyorsa bundler’ın uzantı ve paket çözümleme davranışı TypeScript ayarlarıyla uyumlu olmalıdır.

Örneğin moduleResolution: "bundler" seçip projeyi Node.js ile doğrudan çalıştırmak, derleme sırasında kabul edilen bir import yolunun çalışma zamanında bulunamamasına neden olabilir. Tersi durumda Node.js’e özgü çözümleme kuralları, bundler’ın daha esnek kabul ettiği uzantısız göreli importlarla çakışabilir. Sorunu çözmeden önce şu soruyu netleştirin: “Bu dosyayı derledikten sonra kim çalıştıracak; Node.js mi, bir bundler mı?”

Proje çalışma biçimi Değerlendirilecek yaklaşım Dikkat edilecek nokta
Node.js üzerinde ESM module ve moduleResolution için nodenext package.json içindeki type ve import uzantıları
Bundler kullanan uygulama module: "preserve" ve moduleResolution: "bundler" Bundler’ın paket ve göreli yol kuralları
Mevcut CommonJS yapı Çıktının gerçekten require bekleyip beklemediği ESM paketlerle interop ve çalışma zamanı davranışı

Sorunlu ve Düzeltilmiş Örnek Proje Yapısı

Sorunlu ve Düzeltilmiş Örnek Proje Yapısı

Aşağıdaki küçük projede üç kaynak dosyası olduğunu varsayalım:

  • src/index.ts
  • src/config.ts
  • tests/index.test.ts

Proje ESM olarak çalışacakken aşağıdaki yapılandırma birkaç farklı sorunu aynı anda oluşturur:

{
  "compilerOptions": {
    "target": "es2022",
    "module": "commonjs",
    "moduleResolution": "bundler",
    "rootDir": "./src",
    "outDir": "./dist",
    "types": ["node", "jest", "vitest"]
  },
  "include": ["src/**/*.ts", "tests/**/*.ts"]
}

Burada module CommonJS çıktısı isterken moduleResolution bundler kurallarını kullanıyor. TypeScript 6.0, bundler çözümlemesini farklı module değerleriyle birlikte kullanabilse de bu kombinasyonun anlamı projenin gerçek çalışma biçimine göre değerlendirilmelidir; rastgele eşleştirme yapılmamalıdır. Ayrıca rootDir yalnızca src olduğu halde tests de derleme kapsamına alınmış durumda. Bu, test dosyasının rootDir dışında kalmasına ilişkin hata üretebilir. Geniş types listesi ise projede kurulu olmayan veya gerekmeyen tip paketlerinin aranmasına yol açabilir.

ESM ve Node.js hedefini açıkça seçtiğimiz düzeltilmiş yapılandırma şöyle olabilir:

{
  "compilerOptions": {
    "target": "es2022",
    "module": "nodenext",
    "moduleResolution": "nodenext",
    "rootDir": ".",
    "outDir": "./dist",
    "strict": true,
    "types": ["node"]
  },
  "include": ["src/**/*.ts", "tests/**/*.ts"],
  "exclude": ["dist", "node_modules"]
}

Bu sürümde rootDir: ".", hem src hem de tests klasörünü aynı proje ağacının içinde tutar. Böylece çıktı yapısı da dist/src ve dist/tests biçiminde korunabilir. types alanında yalnızca gerçekten global Node.js tiplerine ihtiyaç duyulduğu varsayılmıştır; test kütüphanesi kullanılacaksa ilgili test tipleri bilinçli biçimde ayrıca eklenmelidir.

package.json içinde "type": "module" bulunan bu yapı için göreli importlarda çalışma zamanı uzantıları da hesaba katılmalıdır. Örneğin src/index.ts içinde ./config.js yazılması, TypeScript’in kaynakta karşılık gelen config.ts dosyasını bulmasına ve derleme sonrasında Node.js’in üretilen config.js dosyasını kullanmasına uygun bir model oluşturur. Buradaki temel ders, module, moduleResolution, package.json ve dosya uzantılarının tek bir karar olarak ele alınmasıdır.

strict Modu JavaScript'ten Geçişte Nasıl Kademeli Açılır?

strict, tek bir hata denetimi değildir; daha güçlü tip güvenliği sağlayan bir seçenek ailesini birlikte etkinleştiren üst ayardır. TypeScript 6.0 ile birlikte strict varsayılan olarak açıktır. Bu nedenle daha önce varsayılan davranışa güvenen bir JavaScript projesi güncellendiğinde, kod değişmemiş olsa bile çok sayıda tip hatası görünür hâle gelebilir.

Resmî TypeScript strict seçeneği referansı, bu ailenin strictNullChecks, noImplicitAny, noImplicitThis, strictFunctionTypes, strictPropertyInitialization, strictBindCallApply, strictBuiltinIteratorReturn, useUnknownInCatchVariables ve alwaysStrict gibi denetimleri kapsadığını belirtir. TypeScript 6.0 döneminde alwaysStrict davranışının kapatılmasına dayanan eski yapılandırmaların da ayrıca gözden geçirilmesi gerekir.

JavaScript'ten geçişte hata sayısının bir anda artmasının temel nedeni, daha önce örtük bırakılan varsayımların görünür olmasıdır. Örneğin function toplam(a, b) içindeki parametreler için tip çıkarılamıyorsa noImplicitAny uyarı üretir. document.querySelector() sonucunun doğrudan kullanılması, strictNullChecks altında olası null durumunun ele alınmasını gerektirir. Normal bir fonksiyon içinde bağlamı belirsiz kalan this kullanımı ise noImplicitThis tarafından yakalanabilir.

Kademeli geçiş, hataları topluca susturmak yerine önce nedenlerine göre sınıflandırmayı gerektirir. Mevcut kod tabanında örtük any, boş değer, sınıf alanı ve this hataları ayrı gruplara ayrılabilir. Ardından projenin risklerine göre kritik alt seçenekler tek tek etkinleştirilip en son strict: true ile bütünlük kontrolü yapılabilir. Tek bir zorunlu sıra yoktur; kullanıcı girdisi yoğun bir projede boş değer kontrolleri, eski JavaScript yardımcılarında ise örtük tipler daha öncelikli olabilir.

Bu tür yapılandırma kararlarını yalnızca ayar ezberleyerek değil, hata mesajları ve çalışma zamanı sonuçları üzerinden öğrenmek isteyenler canlı yazılım eğitimlerinin sistemli öğrenme yaklaşımını inceleyebilir.

  • noImplicitAny neyi etkiler? Çıkarılamayan tiplerin sessizce any olmasını önler. Fonksiyon sınırlarında ve eski JavaScript dosyalarında açıkça değerlendirilmelidir.
  • strictNullChecks neyi etkiler? null ve undefined değerlerini ayrı tipler olarak denetler. DOM erişimi, arama işlemleri ve isteğe bağlı verilerde açıkça tanımlanmalıdır.
  • noImplicitThis neyi etkiler? Bağlamı belirlenemeyen this ifadelerini yakalar. Callback, sınıf dışı fonksiyon ve eski nesne kalıplarında değerlendirilmelidir.
  • strict ne zaman açıkça tanımlanmalı? Yapılandırmanın sürüm varsayımlarından bağımsız ve ekip için anlaşılır olması istendiğinde açıkça yazılmalıdır.

rootDir, src ve tests İlişkisi Nasıl Teşhis Edilir?

rootDir, src ve tests İlişkisi Nasıl Teşhis Edilir?

rootDir, yalnızca “kaynakların bulunduğu klasör” etiketi değildir. Derleyicinin giriş dosyalarının dizin yapısını outDir altında nasıl koruyacağını belirler ve üretilmesi gereken dosyaların seçilen kökün altında bulunmasını zorunlu kılar. TypeScript 6.0'da bir tsconfig.json kullanılırken belirtilmeyen rootDir, yapılandırma dosyasının bulunduğu dizini esas alır.

TypeScript 6.0 sürüm notları, önceki ortak kök çıkarımına güvenen projelerin çıktı yapısını korumak için rootDir değerini açıkça belirlemesi gerekebileceğini açıklar. Bununla birlikte rootDir, hangi dosyaların derlemeye alınacağını belirlemez; bu görev include, files ve içe aktarma zincirleriyle ilişkilidir.

src ve tests kardeş klasörlerken rootDir: "src" kullanılır ve test dosyaları aynı derlemeye alınırsa TS6059 kodlu, “File '...' is not under 'rootDir' '...'. 'rootDir' is expected to contain all source files.” biçimindeki hata görülebilir. Çünkü tests, src klasörünün altında değildir.

  1. Hata mesajındaki dosya yolunu bulun; dosyanın doğrudan mı yoksa bir import üzerinden mi projeye girdiğini kontrol edin.
  2. include, files ve exclude kapsamını inceleyin. exclude edilen bir dosyanın içe aktarma yoluyla yeniden programa girebileceğini unutmayın.
  3. Derlemeye giren dosyaların ortak üst klasörüyle rootDir değerini karşılaştırın.
  4. Üretim derlemesi ile test tip denetiminin farklı kapsamları varsa ayrı yapılandırmalar kullanın.

Üç temel çözüm vardır. Hem src hem tests için çıktı üretilecekse rootDir ortak üst dizine, çoğunlukla . değerine taşınabilir. Testler üretim çıktısına girmemeliyse ana yapılandırmanın kapsamından çıkarılabilir. Farklı modül, tip veya çıktı gereksinimleri bulunuyorsa tsconfig.build.json ve tsconfig.test.json gibi ayrı yapılandırmalar daha net bir sınır oluşturur.

types Alanı Global Tip Çakışmalarını Ne Zaman Önler?

types, global kapsama hangi ambient tip paketlerinin alınacağını sınırlar. TypeScript 6.0'da bu alanın varsayılanı boş listedir. Dolayısıyla Node, test çalıştırıcısı veya başka bir ortam tarafından sağlanan global adlara ihtiyaç duyan projelerin gerekli paketleri açıkça belirtmesi gerekebilir.

Resmî TypeScript types seçeneği referansı, listede bulunmayan bir paketin global bildirimlerinin ve otomatik içe aktarma önerilerinin projeye eklenmeyeceğini belirtir. Ancak bu ayar, uygulama kodunda doğrudan içe aktarılan bir modülün tiplerini ortadan kaldırmaz. import edilen bir kütüphane normal biçimde tip denetimine katılmaya devam eder.

Çakışmalar genellikle birden fazla test ortamının aynı describe, it veya expect adlarını tanımlaması ya da tarayıcı ve sunucu çalışma zamanlarının farklı global varsayımlar getirmesiyle ortaya çıkar. Çözüm olarak rastgele paket adları eklemek yerine, ilgili yapılandırmanın gerçekten hangi ortamda çalışacağını belirlemek gerekir.

  • Ayar neyi etkiler? Global kapsama eklenen ambient paketleri ve bunların sağladığı global adları etkiler.
  • Ne zaman açıkça tanımlanmalı? Node ve tarayıcı kodu ayrıldığında, birden fazla test altyapısı bulunduğunda veya çalışma ortamları için ayrı yapılandırmalar kullanıldığında değerlendirilmelidir.
  • typeRoots ne zaman gerekir? Paket adlarını değil, tip paketlerinin aranacağı klasörleri sınırlamak gerektiğinde kullanılır.
  • Ne yapılmamalı? Hata veren her global ad için kaynağı belirlemeden types listesine paket eklenmemelidir.

Hata Mesajından Ayara Gitmek İçin Teşhis Listesi

TypeScript derleme hatasını çözerken aynı anda birden fazla tsconfig ayarını değiştirmek, hangi değişikliğin işe yaradığını belirsizleştirir. Önce hata mesajındaki ana ifadeyi bulun; ardından yalnızca onunla doğrudan ilişkili ayarı ve çalışma ortamını kontrol edin. TypeScript’in güncel modül tanıları, dosyanın ESM mi CommonJS mi kabul edildiğini yalnızca kaynak koda bakarak değil, module, moduleResolution ve en yakın package.json içindeki type alanını birlikte değerlendirerek açıklayabilir. ([github.com](https://github.com/microsoft/TypeScript/blob/main/src/compiler/diagnosticMessages.json?utm_source=openai))

  1. Tipik hata: “ECMAScript imports and exports cannot be written in a CommonJS file…” veya “ECMAScript module syntax is not allowed in a CommonJS module…”

    İlk kontrol: compilerOptions.module, moduleResolution ve dosyaya en yakın package.json içindeki type alanı.

    Güvenli düzeltme yönü: Proje gerçekten ESM kullanıyorsa package.json içinde "type": "module" ile TypeScript ayarlarının aynı modeli ifade ettiğinden emin olun. CommonJS çalışan bir uygulamada ise kaynak dosyalarının require/module.exports düzeniyle, derleme ayarlarının ve çalıştırma komutunun uyumlu kalmasını sağlayın. Sadece module değerini değiştirmek yerine çalışma zamanını da kontrol edin.

  2. Tipik hata: “Cannot find module './utils.js' or its corresponding type declarations.”

    İlk kontrol: moduleResolution ile paketin package.json içindeki exports, imports ve types alanları.

    Güvenli düzeltme yönü: Node.js’in çalışma biçimini taklit eden bir projede nodenext gibi Node odaklı çözümlemeyi, bundler kullanan projede ise bundler’ın davranışını yansıtan seçeneği değerlendirin. Göreli import yollarındaki dosya uzantısı, paketin dışa açtığı giriş noktası ve gerçekten kurulu olan tip bildirimleri birlikte incelenmelidir. TypeScript’te moduleResolution, import veya export ifadesinin hangi dosyaya karşılık geldiğini belirleyen temel ayardır. ([typescriptlang.org](https://www.typescriptlang.org/tsconfig/moduleResolution?utm_source=openai))

  3. Tipik hata: “File ‘…’ is not under ‘rootDir’ ‘…’. ‘rootDir’ is expected to contain all source files.”

    İlk kontrol: rootDir ile include kapsamının ve varsa exclude desenlerinin kesişimi.

    Güvenli düzeltme yönü: rootDir değerini src olarak belirlediyseniz, include içinde tests/**/*.ts gibi src dışında kalan dosyaları aynı derleme projesine almamaya çalışın. Testleri de derlemek istiyorsanız kökü ortak üst klasöre taşımak veya testler için ayrı bir tsconfig kullanmak daha güvenlidir. rootDir, çıktı klasöründeki kaynak yapısının temelini belirlediği için kapsam dışındaki dosyalarla çakıştığında bu hata oluşur. ([github.com](https://github.com/microsoft/TypeScript/issues/30693?utm_source=openai))

  4. Tipik hata: “Cannot find name ‘describe’”, “Cannot find name ‘test’” veya beklemediğiniz bir global adın tanımlı görünmesi.

    İlk kontrol: types ve gerekiyorsa typeRoots alanları.

    Güvenli düzeltme yönü: Test dosyaları için gerekli global tip paketlerini yalnızca test tsconfig’inde açıkça belirtin. Uygulama tsconfig’inde gereksiz test, Node.js veya başka çalışma ortamı tiplerini otomatik kapsamdan çıkarmak global ad çakışmalarını azaltır. typeRoots kullanıyorsanız, varsayılan tip paketlerinin aranma davranışını daraltabileceğini unutmayın.

  5. Tipik hata: “Parameter ‘x’ implicitly has an ‘any’ type”, “Object is possibly ‘null’” veya benzeri kesinlik hataları.

    İlk kontrol: strict ve onun alt bayrakları; özellikle noImplicitAny ve strictNullChecks.

    Güvenli düzeltme yönü: Kodu hemen gevşetmek yerine hataları iki gruba ayırın: eksik tür anotasyonları ve gerçekten kontrol edilmemiş null/undefined durumları. Gerekirse geçiş sırasında tek bir alt bayrağı geçici olarak kapatın; ancak proje büyüdükçe açık türler, koruyucu koşullar ve daha dar veri modelleriyle yeniden etkinleştirmeyi planlayın. strict, birden fazla sıkı denetimi birlikte açar ve gelecekteki sürümlerde ek kontrollerin bu aileye dahil edilebileceği resmî belgede belirtilir. ([typescriptlang.org](https://www.typescriptlang.org/tsconfig/strict?utm_source=openai))

Teşhis sırasında ayarları rastgele değiştirmeyin. Önce mevcut yapılandırmayla npx tsc --noEmit çalıştırın, ardından yalnızca bir ayarı değiştirip yeniden derleyin. Sonucu hem projenin gerçek npm script’iyle hem de editördeki tanılarla ayrı ayrı kontrol edin; editör farklı bir TypeScript sürümü veya farklı bir tsconfig seçmiş olabilir.

Gelecek Sürümlere Hazırlık İçin Kalıcı tsconfig Kontrol Listesi

TypeScript güncellemelerinde güvenli yaklaşım, varsayılanların neye dönüştüğünü ezberlemek değil, projenin kararlarını dosyada görünür hâle getirmektir. Aşağıdaki kontrol listesi sürüm numarasına bağlı kalmadan kullanılabilir:

  • module ve moduleResolution: Bu ayarlar üretilen modül biçimini ve import yollarının nasıl çözüleceğini etkiler. Node.js, bundler veya başka bir çalışma ortamı kullanıyorsanız, ikisini o ortamın davranışına göre açıkça tanımlayın.
  • rootDir, include ve exclude: Bu üçlü, derlemeye hangi dosyaların girdiğini ve çıktı klasöründeki yapının nasıl oluşacağını belirler. src, tests, yapılandırma dosyaları ve üretilen klasörlerin sınırlarını özellikle kontrol edin.
  • strict alt bayrakları: Tür güvenliğini, örtük any kullanımını ve null kontrollerini etkiler. JavaScript’ten geçişte kademeli açılabilir; fakat hangi alt bayrağın kapalı olduğu belgelenmelidir.
  • types kapsamı: Global tanımların hangi tip paketlerinden geldiğini sınırlar. Uygulama ve test ortamlarının farklı global değişkenleri varsa ayrı tsconfig dosyaları daha temiz bir model sunar.
  • Kullanımdan kaldırılan seçenekler: TypeScript 6.0 belgelerinde baseUrl ve classic gibi seçenekler için geçiş yönlendirmeleri yer alır. Bu tür uyarıları kalıcı olarak bastırmak yerine resmî değişiklik notundaki öneriyi ve projenin gerçek derleme sonucunu birlikte inceleyin. ([devblogs.microsoft.com](https://devblogs.microsoft.com/typescript/announcing-typescript-6-0/?utm_source=openai))
  • Çıktı tercihleri: noEmit, declaration ve sourceMap seçeneklerinin yalnızca derleme kontrolü mü, yayınlanabilir çıktı mı, yoksa hata ayıklama desteği mi istediğinize göre belirlendiğini kontrol edin.
  • package.json ile birlikte inceleme: type, exports, imports, çalıştırma script’leri ve tsconfig ayarları aynı çalışma modelini anlatmalıdır. Sadece editörde yeşil görünen bir yapı, npm script’i veya gerçek Node.js çalıştırmasıyla uyumlu olmayabilir.

Yeni bir TypeScript sürümünde önce resmî release notes sayfasını, ardından tsconfig seçenekleri referansını ve son olarak projenin kendi derleme çıktısını karşılaştırın. Web temellerini ve derleyicinin kodu nasıl yorumladığını sistemli biçimde öğrenmek isteyenler için canlı yazılım eğitimleri bu düşünme sürecini uygulamalı çalışmalarla destekleyebilir.

Sık Sorulan Sorular

module ve moduleResolution ayarları neden birlikte kontrol edilmelidir?

module üretilen JavaScript’in modül biçimini, moduleResolution ise import yollarının hangi kurallarla çözüleceğini belirler. Bu iki ayar çalışma ortamıyla uyuşmadığında derleme başarılı görünse bile uygulama çalışırken modül bulunamaması veya ESM/CommonJS uyumsuzluğu yaşanabilir.

rootDir src klasörü olarak ayarlandıysa tests klasöründeki dosyalar neden hata verir?

tests klasörü src dışında bulunuyorsa, include ile bu dosyalar derlemeye alınırken rootDir sınırının dışına çıkar. Bu durumda testleri ayrı bir tsconfig ile derlemek veya ortak üst klasörü kök olarak belirlemek gerekir.

types alanını tsconfig.json içinde açıkça tanımlamak hangi global tip çakışmalarını önleyebilir?

Test ortamına ait describe ve test gibi adların uygulama koduna taşınmasını ya da farklı çalışma ortamlarına ait global tanımların aynı projede çakışmasını sınırlayabilir. Hangi tip paketlerinin dahil edileceğini daha öngörülebilir hâle getirir.

strict modunu JavaScript’ten TypeScript’e geçerken doğrudan açmak yerine kademeli etkinleştirmek ne zaman mantıklıdır?

Mevcut kod tabanı büyükse, tür anotasyonları eksikse veya çok sayıda JavaScript dosyası birlikte derleniyorsa kademeli geçiş mantıklıdır. Önce kritik dosyalar ve alt projeler ele alınabilir; ancak gevşetilen her kontrolün nedeni ve yeniden açılma planı kayıt altına alınmalıdır.

ESM ve CommonJS uyumsuzluğu yalnızca tsconfig.json değiştirilerek çözülebilir mi?

Her zaman değil. package.json içindeki type, dosya uzantıları, npm script’leri, çalıştırıcı ve bundler ayarları da aynı modül modelini kullanmalıdır. tsconfig tek başına diğer çalışma zamanı kararlarını değiştirmez.

Bu yaklaşım, tsconfig.json hatalarını ezbere ayar değiştirerek değil, hata mesajı ile proje mimarisi arasındaki ilişkiyi kurarak çözmenizi sağlar.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar

İlgili Eğitimler

Berk Keskin — Yazılım Geliştirici ve Eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; bugün öğrencinin seviyesine ve hedefine göre şekillenen sürdürülebilir öğrenme sistemleri tasarlıyor. 500'den fazla kişiye ezber değil, düşünerek kod yazmayı öğretti — Berk Akademi'de izlemeye değil üretmeye dayalı öğrenme kültürünü o kuruyor.

WhatsApp Hemen Ara