TypeScript Strict Mode — Niyə Vacibdir və Necə Aktivləşdirmək
TypeScript strict mode bug-ların 40%-ni compile vaxtı tutur. Bakıda işləyən hər developer bunu bilməlidir — praktiki nümunələrlə izah edirik.
TypeScript Strict Mode — Niyə Vacibdir və Necə Aktivləşdirmək
Salam, dostlar! Bu gün danışacağımız mövzu TypeScript-in ən güclü, amma ən çox ignore edilən feature-larından biridir — strict mode. Bakıda bir çox layihələrdə code review edəndə görürəm ki, tsconfig.json faylında "strict": false yazılıb ya da ümumiyyətlə həmin sətir yoxdur. Nəticə? Production-da Cannot read properties of undefined xətası, gecə saat 2-də hotfix, və stress.
Gəlin buna son qoyaq.
Strict Mode Nədir?
TypeScript-in strict mode-u əslində bir neçə fərqli compiler flag-in birləşməsidir. "strict": true yazdığınız zaman bu flag-ların hamısı avtomatik aktivləşir:
strictNullChecks—nullvəundefinedilə işləməyi məcbur edirstrictFunctionTypes— funksiya parametrlərini daha ciddi yoxlayırstrictBindCallApply—bind,call,applyüçün tip yoxlamasıstrictPropertyInitialization— class property-lərin constructor-da initialize olmasını tələb edirnoImplicitAny— tip yazılmayan yerlərdəanyqoymağa icazə vermirnoImplicitThis—this-in tipinin bilinməsini tələb ediralwaysStrict— hər faylın əvvəlinə"use strict"əlavə ediruseUnknownInCatchVariables— catch blokundaunknowntipi istifadə edir
Bir sözlə, strict mode TypeScript-ə deyir: "Heç bir güzəştə getmə, hər şeyi yoxla."
Niyə Vacibdir? Real Rəqəmlər
Bunu sadəcə "yaxşı praktikadır" deyib keçmək olmaz. Rəqəmlərə baxaq:
- 2024-cü ildə Airbnb-nin daxili araşdırması göstərdi ki, strict mode aktivləşdirdikdən sonra production bug-ların 38%-i artıq compile mərhələsində tutulurdu.
- State of JS 2024 sorğusuna görə, TypeScript istifadəçilərinin 67%-i strict mode-u aktiv saxlayır.
- Microsoft-un öz komandalarında strict mode-suz layihələrdə 2.5x daha çox runtime type error qeydə alınıb.
Bakı kontekstində düşünün: siz Kapital Bank-da, ABB-də, ya da PASHA Holding-in tech komandasında işləyirsiniz. Production-da kritik bir undefined xətası çıxır. Müştəri əməliyyat edə bilmir. Strict mode olsaydı, o bug heç deploy olunmayacaqdı.
Yaxud frilans işləyirsiniz, upwork-dən 2000 AZN-lik layihə götürmüsünüz. Müştəri bug report göndərir, siz isə 3 gün həmin null reference-ı axtarırsınız. Strict mode bu vaxtı sıfıra endirə bilərdi.
Necə Aktivləşdirmək?
Çox sadədir. tsconfig.json faylınızda:
json{ "compilerOptions": { "strict": true, "target": "ES2022", "module": "ESNext", "outDir": "./dist", "rootDir": "./src" } }
Bu qədər. Bir sətir — "strict": true.
Ancaq əgər mövcud layihəyə əlavə edirsinizsə, birdən-birə 300 xəta görə bilərsiniz. Narahat olmayın, addım-addım yanaşma var.
Real Kod Nümunəsi: Strict vs Non-Strict
Gəlin praktiki bir nümunəyə baxaq. Təsəvvür edin, istifadəçi məlumatlarını API-dən çəkirsiniz:
❌ Strict mode OLMADAN (təhlükəli kod):
typescriptinterface User { name: string; email: string; phone?: string; } function sendSMS(user: User) { // phone undefined ola bilər, amma compiler susur! const formatted = user.phone.replace("+994", "0"); console.log(`SMS göndərilir: ${formatted}`); } const user: User = { name: "Əli", email: "eli@mail.az" }; sendSMS(user); // 💥 Runtime Error: Cannot read properties of undefined
Bu kod compile olur, heç bir xəta göstərmir. Amma runtime-da çökür.
✅ Strict mode İLƏ (təhlükəsiz kod):
typescriptinterface User { name: string; email: string; phone?: string; } function sendSMS(user: User) { // TS2532: Object is possibly 'undefined' // Compiler MƏCBUR edir ki, yoxlayasan! if (!user.phone) { console.log("Telefon nömrəsi yoxdur, SMS göndərilə bilməz."); return; } const formatted = user.phone.replace("+994", "0"); console.log(`SMS göndərilir: ${formatted}`); } const user: User = { name: "Əli", email: "eli@mail.az" }; sendSMS(user); // ✅ Heç bir xəta, təhlükəsiz işləyir
Gördüyünüz kimi, strict mode sizi düzgün kod yazmağa məcbur edir. Bu məcburiyyət deyil, bu sığortadır.
Mövcud Layihəyə Tədricən Tətbiq Etmək
Əgər artıq böyük bir layihəniz varsa, birbaşa "strict": true yazmaq 500+ xəta verə bilər. Strategiya budur:
- Əvvəlcə ən kritik flag-ı aktiv edin:
json{ "compilerOptions": { "strictNullChecks": true } }
- Xətaları düzəldin — adətən bug-ların 60-70%-i
strictNullChecks-dan gəlir. - Sonra
noImplicitAnyəlavə edin — bu da çox xəta verəcək, amma hər biri potensial bug-dır. - Digər flag-ları bir-bir əlavə edin.
- Sonda
"strict": trueyazıb, fərdi flag-ları silin.
Bu proses böyük layihədə 2-4 həftə çəkə bilər, amma hər addımda kodunuz daha etibarlı olur.
Bakı Developer-ləri Üçün Praktiki Məsləhətlər
- İş müsahibəsində üstünlük: Bakıda EPAM, Crocusoft, Azerconnect kimi şirkətlərdə TypeScript strict mode bilən developer-lər daha yüksək qiymətləndirilir. 1500-2500 AZN arası junior maaşla başlayırsınızsa, strict mode bilikləri sizi mid-level-ə daha tez çatdıra bilər.
- Yeni layihəyə həmişə strict ilə başlayın: Sıfırdan layihə yaradırsınızsa, heç düşünməyin,
"strict": trueolmalıdır. - ESLint ilə birləşdirin:
@typescript-eslint/recommendedpreset-i strict mode ilə mükəmməl işləyir. - CI/CD pipeline-a əlavə edin:
tsc --noEmitəmrini GitHub Actions-da işlədin ki, strict xətası olan kod heç merge olunmasın.
bash# CI-da istifadə üçün: npx tsc --noEmit --strict
Nəticə
TypeScript strict mode bir "nice to have" deyil, "must have"-dir. Hər bir undefined xətası, hər bir any tipi — bunlar gələcəkdə sizi gecə saat 3-də oyandıracaq bug-lardır.
Bu gün tsconfig.json-unuzu açın, "strict": true yazın, və çıxan xətaları bir-bir düzəldin. Bu, karyeranız üçün ən yaxşı investisiya olacaq.
Kod yazmaq yox, etibarlı kod yazmaq vacibdir. Strict mode bunun ilk addımıdır.
Suallarınız varsa, kommentlərdə yazın. Növbəti məqalədə TypeScript generics mövzusunu ətraflı analiz edəcəyik. Görüşənədək! 🚀
Oxşar məqalələr
Zod ilə TypeScript Runtime Validasiyası: Bugları Production-da Deyil, Əvvəlcədən Tut
TypeScript compile-time-da tip yoxlayır, amma runtime-da API-dən gələn datanı kim yoxlayacaq? Zod ilə validasiyanı necə həll edəcəyini real nümunələrlə göstərirəm.
TypeScript ilə Supabase inteqrasiyası — tam tip təhlükəsizliyi
Supabase + TypeScript birlikdə işlədəndə runtime xətaları minimuma enir. Database-dən gələn hər sətir tipli olur. Necə? Bu məqalədə.
TypeScript Generics — Nədir, Niyə Lazımdır, Necə İstifadə Olunur?
TypeScript generics-i başa düşmək Bakıda frontend və backend vakansiyaların 70%-ində tələb olunan skilldir. Bu bələdçi ilə generics-i bir dəfəlik öyrən.