TYPESCRIPT STRICT MODE VE TSCONFIG
Microsoft'un kendi VS Code repo migrasyonunda strict mode aktif edildiğinde 30'dan fazla gizli null/undefined hatası ortaya çıkmıştı; Airbnb mühendislik blogu ise JavaScript'ten TypeScript'e geçişle production bug'larında yaklaşık %38'lik bir düşüş raporladı. Bu sayıların büyük kısmı tek bir bayrağa, yani strict: true'ya bağlı. Strict mode, derleyiciye "varsayımlarımı sorgula" demenin kısayolu — ve genellikle bir hafta sonu uğraş, aylarca dinlenen runtime hatalarını kapatıyor.
Strict Mode Aslında Ne Açıyor?
tsconfig.json içinde "strict": true tek satır gibi görünür ama altında yedi-sekiz ayrı bayrağı tetikler. Bu bayrakların her biri farklı bir bug sınıfını yakalar:
- noImplicitAny: Tipi yazılmamış parametre ve değişkenler artık sessizce
anyolamaz. - strictNullChecks:
nullveundefineddiğer tiplerden ayrı tutulur — "milyar dolarlık hata"nın panzehri. - strictFunctionTypes: Fonksiyon parametre tipleri kontravaryant kontrol edilir.
- strictBindCallApply:
bind/call/applyçağrılarındaki argümanlar denetlenir. - strictPropertyInitialization: Class property'lerinin constructor'da atanmış olması zorunlu hale gelir.
- noImplicitThis: Belirsiz
thisreferansları derlemez. - alwaysStrict: Emit edilen JS'in tepesine "use strict" eklenir.
- useUnknownInCatchVariables:
catch (e)bloğundaeartıkanydeğilunknown.
Microsoft'un TypeScript ekibinin 2019'da paylaştığı verilere göre VS Code kod tabanında sadece strictNullChecks açılırken bulunan ve düzeltilen hata sayısı 4.500'ün üzerindeydi — çoğu kullanıcının hiç fark etmediği sessiz undefined erişimleriydi. Konuyu daha derinlemesine incelemek isteyenler için detaylı kılavuzu faydalı bir başlangıç noktasıdır.
strictNullChecks: En Büyük Kazanç
Strict mode bayraklarından sadece birini açacak vaktiniz varsa, kanıtlar bunun strictNullChecks olması gerektiğini söylüyor. Tony Hoare'in "milyar dolarlık hata" olarak adlandırdığı null referansları, modern web uygulamalarındaki çökme bug'larının başlıca kaynağı.
Klasik bir örnek:
function getLength(s: string) { return s.length; } — strict mode kapalıyken getLength(null) derleme zamanında geçer, kullanıcı sayfayı açtığında "Cannot read properties of null" hatası alır. Açıkken aynı satır derlemez; derleyici sizi s: string | null imzasına ve içeride bir guard yazmaya zorlar.

Airbnb Raporu: Sayılarla Tip Güvenliği
Airbnb mühendislerinden Brie Bunge'nin 2019 JSConf Hawaii sunumunda paylaştığı analiz, geçmişteki postmortem'lerin %38'inin TypeScript tarafından önlenebileceğini gösterdi. Bu oran, neredeyse her üç production incident'ten birinin tek satır tsconfig değişikliğiyle elenebileceği anlamına geliyor.
Aynı analizde öne çıkan bug kategorileri:
- Tanımsız property'lere erişim (undefined access)
- Yanlış argüman tipi gönderilen fonksiyon çağrıları
- Boş veya nullable değerlerin filtrelenmemesi
- Refactor sonrası unutulan kullanım noktaları
- API yanıtlarının yanlış varsayılan şekli
Bu kalemlerin tamamı, strict mode aktifken derleyici hatası olarak yüzeye çıkıyor — yani sürüm öncesi, kullanıcıdan önce.
tsconfig.json: Pratik Kurulum
Yeni bir proje başlatıyorsanız strict mode'u ilk taahhütten itibaren açık tutmak en kolayı:
{ "compilerOptions": { "strict": true, "noUncheckedIndexedAccess": true, "exactOptionalPropertyTypes": true } }
Buradaki ek iki bayrak strict: true'nun parçası değildir ama strict felsefesinin doğal uzantısıdır. noUncheckedIndexedAccess array ve obje indekslemelerine | undefined ekler — arr[0]'ın boş bir dizide ne döndüğünü hatırlatır. exactOptionalPropertyTypes ise { name?: string } tipine açıkça undefined atamayı engeller.
Mevcut Projeye Kademeli Geçiş
Mevcut bir kod tabanında strict: true bir anda açıldığında binlerce hatayla karşılaşmak yaygın. Microsoft'un TypeScript ekibinin VS Code migrasyonunda kullandığı yaklaşım, bayrakları teker teker açmak:
- Önce
noImplicitAny— implicit any'leri temizleyin. - Sonra
strictNullChecks— en zor adım, en büyük kazanç. - Ardından
strictFunctionTypesvestrictBindCallApply— görece kolay. - Son olarak
strictPropertyInitialization— class-heavy kodda dikkatli olun.
Dosya bazlı geçiş için // @ts-strict yorum bayrakları veya typescript-strict-plugin gibi araçlar kullanılabilir; bunlar tek dosyayı strict moda almanızı sağlar. Temel TypeScript yapılandırma kavramlarını derinleştirmek isterseniz TypeScript eğitimi içeriğinden yararlanabilirsiniz.
Strict Mode'un Yakaladığı Tipik Bug Sınıfları
Topluluk raporlarında ve şirket postmortem'lerinde sürekli karşımıza çıkan örüntüler şunlar:
- API yanıtlarındaki opsiyonel alanların guard'sız kullanımı — özellikle
user.address.citygibi zincirler. Array.prototype.findsonucununundefinedolabileceğinin unutulması.- Refactor sonrası fonksiyona
nullgeçilebilecek yeni bir caller eklenmesi. - JSON.parse çıktısının
anysanılması —unknownolmalı. - Map/Set
.get()dönüşlerinin doğrudan kullanılması.

Maliyet ve Geri Dönüş
Strict mode'un ücreti, eski kod tabanında bir defalık temizlik iş yüküdür. Geri dönüşü ise her PR'da, her refactor'da, her yeni geliştiricinin onboarding'inde tekrar tekrar alınır. Airbnb ve Microsoft gibi büyük ölçekli ekiplerin sayıları gösteriyor: derleyiciye "şüpheli ol" demek, üç haneli sayıda runtime hatasını sessizce eler. tsconfig'inizde strict: true satırı yoksa, kod tabanınız size hâlâ söylemediği bir şeyler söylemeye çalışıyor. TypeScript dilinin daha geniş özelliklerini ve tip sistemini öğrenmek için TypeScript eğitimi kaynağını inceleyebilirsiniz.



