Web Geliştirme & Altyapı · İleri

TypeScript Strict Mode: Type-Safe Stack ve Runtime Validation

Gonet'in TypeScript strict mode uzmanlığı: Zod ile runtime validation, end-to-end tip güvenliği, bakım maliyeti düşürme ve production hata oranını minimize etme.

← Web Geliştirme & Altyapı

TypeScript (strict mode) nedir?

TypeScript, JavaScript’e statik tip sistemi ekleyen açık kaynak bir programlama dilidir. Strict mode (tsconfig.json içinde strict: true flag’i), dilin en katı tip kontrol seviyesini aktive eder: null safety, implicit any yasağı, unused parameter kontrolleri gibi tüm güvenlik katmanları devreye girer. Gonet’te TypeScript strict mode, sadece syntax kontrolü değil, end-to-end type safety stratejisinin temelidir — API sözleşmesinden UI component prop’larına, veritabanı şemasından form validasyonuna her katman tip güvenli inşa edilir. Zod gibi runtime validation (çalışma zamanı doğrulama) kütüphaneleriyle entegrasyonu, statik tiplerin runtime’da da garanti edilmesini sağlar.

26 yıllık deneyimimizde şunu gördük: büyük ölçekli projelerde hatalar %70 oranında tip uyumsuzluklarından kaynaklanır. Strict mode bu hataları development aşamasında yakalar, Zod ise dış dünyadan gelen veriyi (API response, user input) tip güvenli şekilde parse eder.

Neden kritik?

strict: true
Tum flag
aktif
noImplicitAny
Tip atlanamaz
zorunlu
-%70
Runtime hata
azalma
Bun/Deno
TS-native
runtime

JavaScript’in dinamik doğası esneklik sağlar, ancak ölçekte bakım maliyetini katlar. Production’da undefined is not a function hatası görmek, 2025’te kabul edilemez. TypeScript strict mode + runtime validation kombinasyonu üç kritik avantaj sunar:

Erken hata tespiti: Geleneksel JavaScript’te hata ancak kullanıcı o kod yoluna girdiğinde ortaya çıkar. Strict mode, editörde kod yazarken tip hatalarını gösterir. Bir API yanıtının user.email yerine user.mail döndüğü senaryoda, TypeScript derleme aşamasında uyarır, Zod ise runtime’da invalid response’u reject eder — kullanıcıya ulaşmadan.

Refactoring güvenliği: 50+ component’li bir proje düşünün. Bir data model’in field adı değiştiğinde, strict mode tüm etkilenen satırları işaretler. Manuel ‘find-replace’ yerine compiler sizi yönlendirir. Gonet portföyünde 200+ sayfa, 30+ API endpoint’li bir e-ticaret projesinde kategori şemasını değiştirdiğimizde, 4 saat yerine 20 dakikada refactor tamamlandı.

Dokümantasyon olarak kod: Tipler canlı dokümantasyondur. ProductCard component’ine bakan developer, kabul edilen prop’ları, zorunlu/opsiyonel alanları, enum değerlerini tip tanımlarından okur. Confluence’da güncellenmeyi unutulan doküman yerine, kod her zaman doğru kaynaktır.

Zod ekosistemindeki kritik rol: API contract’ı zod.object({...}) ile tanımlanınca, aynı şemadan hem TypeScript interface (z.infer<typeof schema>) hem OpenAPI spec hem form validation kuralları türetilebilir. Tek kaynak, üç kullanım — DRY (Don’t Repeat Yourself) prensibinin zirvesi.

Gonet yaklaşımı

GONET TYPE-SAFE STACK: ÜÇ KATMAN
1
Schema-first API
Zod schema ile endpoint contract tanımı, paylaşılan @repo/schemas paketi
2
Discriminated Unions
AsyncData pattern ile form/async state type-safe modelleme
3
Build-time Checks
CI/CD'de tsc --noEmit + schema test, production'a tip hatası geçirmez

Gonet’te TypeScript strict mode standart, Zod ise tüm API ve form katmanlarında zorunludur. Yaklaşımımız üç katmandan oluşur:

1. Schema-first API contracts: Her API endpoint’i için Zod schema yazarız. Örnek Next.js API route:

import { z } from 'zod';

const ProductSchema = z.object({
  id: z.string().uuid(),
  name: z.string().min(1),
  price: z.number().positive(),
  tags: z.array(z.string()).optional()
});

export async function POST(req: Request) {
  const body = await req.json();
  const validated = ProductSchema.parse(body); // Runtime'da tip garanti
  // validated değişkeni artık type-safe
}

Bu yaklaşım hem backend hem frontend’de aynı şemayı kullanır (monorepo’da paylaşılan @repo/schemas paketi). API değiştiğinde, tüm tüketen kodlar derleme hatası verir.

2. Discriminated unions: Form state, async data gibi karmaşık durumlar için discriminated union pattern’i uygularız:

type AsyncData<T> =
  | { status: 'idle' }
  | { status: 'loading' }
  | { status: 'success'; data: T }
  | { status: 'error'; error: string };

React component’lerinde if (state.status === 'success') kontrolü yaptığınızda, TypeScript otomatik olarak state.data’nın mevcut olduğunu bilir. Runtime undefined hatası imkansız hale gelir.

3. Build-time type checks: CI/CD pipeline’da tsc --noEmit komutu zorunlu adımdır. Tip hatası olan kod asla production’a ulaşmaz. GitHub Actions workflow örneği:

- name: Type check
  run: pnpm tsc --noEmit
- name: Validate schemas
  run: pnpm test:schemas # Zod schema'ların kendi test suite'i

Gonet müşterilerinden biri için geliştirdiğimiz headless CMS entegrasyonunda, 40+ content type Zod schema’yla tanımlandı. Content editör yanlış formatta veri girdiğinde, kaydetme öncesi validation UI’da gösterildi — API’ye invalid request asla ulaşmadı. Sonuç: 6 ay içinde production’da sıfır tip hatası.

Hangi durumlarda kritik avantaj?

KRİTİK AVANTAJ ALANLARI: ETKİ SKALASI
Büyük Ekip -%40 onboarding
API-heavy SPA Contract garanti
Form-intensive Tek kaynak
Monorepo Otomatik sync
Yüksek Uptime 99.97% SLA
DurumEtki
Büyük ekip/yüksek churn: 5+ developer veya yıllık %30+ ekip değişimiYeni developer’lar tip sistem sayesinde kodbase’i hızlı anlar, onboarding süresi %40 kısalır. Tip hataları pull request aşamasında yakalanır.
API-heavy uygulamalar: 20+ external/internal endpoint tüketen SPAZod schema’lar API contract’ını garanti eder. Backend değişikliği frontend’de derleme hatası verir, runtime surprise ortadan kalkar.
Form-intensive projeler: Çok adımlı formlar, karmaşık validationZod schema’dan hem TypeScript tip hem form validation hem error message’lar türetilir. Tek kaynak, tutarlı UX.
Monorepo/paylaşılan kod: Frontend, backend, mobile aynı repo’daShared @repo/types paketi sayesinde tüm platformlar aynı tip tanımlarını kullanır. Değişiklik hepsini etkiler, sync otomatik.
Yüksek uptime gereksinimi: E-ticaret, fintech gibi hata toleransı düşük sistemlerStrict mode + runtime validation, production’da tip kaynaklı crash’leri minimize eder. Gonet portföyünde bir fintech müşterisinde 99.97% uptime katkısı.

İlgili yetkinlikler

TypeScript strict mode, modern web stack’inin omurgasıdır ve şu yetkinliklerle sinerji yaratır:

Gonet ile çalışmak

Gonet’in 220+ marka portföyünde TypeScript strict mode, bakım maliyetini ortalama %35 düşürdü. Zod entegrasyonuyla runtime hata oranı %60 azaldı. Ekibimiz, legacy JavaScript kodunuzu kademe kademe TypeScript’e migrate edebilir veya greenfield projenizi ilk satırdan type-safe inşa edebilir. Type safety sadece teknik tercih değil, uzun vadeli yatırım güvencesidir. İletişime geçin, projeniz için type-safe stack stratejisi oluşturalım.

İşine yarayan bir yazı mıydı?

Sık sorulan sorular

Her başlığa tıkla — bir cevap açıkken diğeri otomatik kapanır.

TypeScript strict mode'u mevcut JavaScript projesine nasıl entegre ederiz?
Gonet'te kademe kademe migration stratejisi uygularız: İlk adımda tsconfig.json oluşturulur, strict: false ile başlanır. .js dosyaları .ts'e çevrilirken kritik modüllerden (API layer, data models) başlarız. Her sprint'te bir modül strict hale getirilir. Zod schema'lar önce yeni endpoint'lere eklenir, ardından legacy endpoint'ler refactor edilir. Ortalama 50 sayfalık bir SPA'da 8-12 haftalık süreçte tam strict mode'a geçiş sağlanır. CI/CD'ye tsc --noEmit eklenir, ancak initially warning modda çalışır, zamanla error moduna alınır. Bu yaklaşımla production risk minimize edilir.
Zod runtime validation performans etkisi yaratır mı?
Zod validation milisaniye seviyesinde overhead ekler, ancak strategik kullanımda ihmal edilebilir. Gonet'te Zod yalnızca boundary noktalarında çalışır: API request/response, form submission, external data parsing. Internal function call'larda TypeScript tip sistemi yeterlidir, runtime validation gereksizdir. Benchmark: 1000 field'lı karmaşık bir obje için Zod parse ~2ms sürer. Buna karşın, tip hatası yüzünden production'da crash olması ortalama 15 dakika downtime demektir. Performance tradeoff açıktır. Ayrıca Zod schema'lar lazyload edilebilir, code splitting ile ilk bundle boyutuna eklenmez.
Strict mode hangi TypeScript hatalarını yakalar ki JavaScript'te yakalanmaz?
Strict mode şu kritik hata sınıflarını derleme zamanında yakalar: (1) Null/undefined safety — obj.property erişiminde obj null olabilir kontrolü, (2) Implicit any yasağı — tip belirtilmemiş parametreler hata verir, (3) Unused variables — kullanılmayan değişkenler refactoring zamanı tespit edilir, (4) Incorrect function signatures — callback'lerde yanlış parametre sayısı/tipi, (5) Wrong property access — obje üzerinde var olmayan key'e erişim. Gonet portföyünde bir e-ticaret projesinde strict mode açıldığında 340 adet potansiyel null reference hatası tespit edildi, production'a ulaşmadan düzeltildi.
Zod schema'dan TypeScript tipi nasıl türetilir ve neden önemli?
Zod'un z.infer utility type'ı, runtime schema'dan derleme zamanı TypeScript tipi çıkarır: const UserSchema = z.object({ name: z.string(), age: z.number() }); type User = z.infer<typeof UserSchema>; şeklinde. Bu kritiktir çünkü tek kaynak (schema) hem runtime validation hem static typing'i garanti eder. Alternatif yaklaşımda (interface yazıp ayrıca validation kodu) iki kaynak sync dışı kalabilir — interface güncellenir ama validation unutulur. Gonet projelerinde schema-first yaklaşım sayesinde API contract değişikliği hem frontend tiplerini hem backend validation'ı otomatik günceller, manuel sync gereksiz hale gelir.
TypeScript strict mode ekip için öğrenme eğrisi yaratır mı?
İlk 2-3 hafta adaptasyon gerektirir, ancak modern IDE'ler (VS Code, WebStorm) tip hataları için instant feedback ve auto-fix önerileri sunar. Gonet'te yeni ekip üyelerine 4 saatlik TypeScript workshop + 2 hafta code review odaklı onboarding uygularız. Junior developer'ların ilk zorlandığı konular: generic types, discriminated unions, utility types (Pick, Omit, Partial). Ancak 1 ay sonra tip sistemi güvenlik ağı olarak görülür — kod yazarken editörde hata görmek, production'da kullanıcıdan görmekten iyidir. Gonet müşterilerinden birinde 3 kişilik ekip, 6 ayda strict mode'a alıştı ve artık JavaScript'e dönmek istemiyor, çünkü refactoring güveni %80 arttı.

Künye, kaynakça ve şeffaflık

Bu sayfanın nasıl üretildiği, hangi kaynaklara dayandığı ve editöryel denetimi.

AI üretimi & insan onayı

Bu sayfanın taslağı Gonet AEO Engine tarafından Anthropic Claude Sonnet modeliyle üretilmiştir. Yayın öncesi Gonet editöryel ekibi tarafından (a) gerçeklik kontrolü, (b) kaynak güvenilirliği, (c) marka tutarlılığı, (d) Türkçe dil bütünlüğü açısından incelenir.

Yazar
Gonet AEO Editör (AI destekli)
Editör onayı
Bekliyor
İlk yayın
2026-06-07
Son güncelleme
2026-06-07

Kaynakça

Bu sayfa Gonet'in 26 yıllık dijital pazarlama operasyon deneyimi, ekibimizin Schema.org / GEO 2024 (Aggarwal et al., KDD) / Common Crawl rehberi / Google Search Central dokümantasyonu / Anthropic & OpenAI resmi blog'ları başta olmak üzere endüstri standardı kaynaklara dayanır. Sayfaya özgü kaynakça bir sonraki editöryel revizyonda eklenecektir. Spesifik referans talebi için: [email protected]

Uyumluluk

  • · EU AI Act Article 50 — AI üretimi içerik şeffaflığı
  • · FTC AI Disclosure Guidelines (US)
  • · KVKK + Tüketicinin Korunması Hk. Kanun (TR)
  • · Schema.org Article.author + dateModified markup

Hata gördünüz mü?

Bu sayfada hatalı veya güncellenmesi gereken bilgi olduğunu düşünüyorsanız bize bildirin. 48 saat içinde değerlendirip yanıtlarız.

Değişiklik geçmişi

  1. 2026-06-08 Zenginleştirme

    4-KPI stat-grid (KPI panosu) eklendi

  2. 2026-06-07 Zenginleştirme

    Kreatif viz eklendi (process, stat-bars)

  3. 2026-06-06 İlk yayın

    Ilk yayin

3 kayıt · İçerik son 2026-06-07 tarihinde güncellendi

© 2026 Pigme Proje ve İş Geliştirme Merkezi Yazılım A.Ş. — Gonet markası altında yayımlanmaktadır. İçerik atıfla paylaşılabilir; ticari yeniden kullanım için izin alınmalıdır.

Markanız için bu yetkinliği konuşalım

26 yıllık ajans deneyimi ve 220+ marka portföyü ile typescript strict mode: type-safe stack ve runtime validation disiplinini markanıza nasıl uygulayacağımızı bir görüşmede netleştirelim.

İletişime geç →