Tüm blog yazıları

TypeScript’te İleri Düzey Tipler

TypeScript’in sunduğu tip sistemi, sadece temel veri türleriyle sınırlı değildir. Daha karmaşık, esnek ve gerçek hayat senaryolarını desteklemek için gelişmiş tip özellikleri de sunar. Bu özellikler sayesinde daha güvenli ve anlaşılır kodlar yazmak mümkün olur. Bu makalede, TypeScript’

eminbasbayan4 dk okuma
TypeScript’te İleri Düzey Tipler

TypeScript’in sunduğu tip sistemi, sadece temel veri türleriyle sınırlı değildir. Daha karmaşık, esnek ve gerçek hayat senaryolarını desteklemek için gelişmiş tip özellikleri de sunar. Bu özellikler sayesinde daha güvenli ve anlaşılır kodlar yazmak mümkün olur.

Bu makalede, TypeScript’in ileri düzey tiplerinden olan union types, intersection types, literal types, nullable types ve optional erişim operatörlerini açıklayacağız.

Union Types (Birden Fazla Tip Kullanımı)

Union type, bir değişkenin birden fazla türden birine sahip olmasını sağlar. Örneğin, bir değişken hem string hem de number olabiliyorsa, bu durumda union type kullanılır.

tsx
let sonuc: number | string;

sonuc = 90;
sonuc = "henüz açıklanmadı";

Bu kullanım, özellikle API'den gelen verilerde ya da esnek girişlerde çok işe yarar.

Intersection Types (Tip Kesişimi)

Intersection types, birden fazla tipin birleşimiyle oluşan yeni bir tip tanımlar. Bu yeni tip, birleşen tüm tiplerin özelliklerini taşımalıdır.

tsx
type Draggable = {
  surukle: () => void;
};

type Resizable = {
  yenidenBoyutlandir: () => void;
};

type UIElement = Draggable & Resizable;

let pencere: UIElement = {
  surukle() {
    console.log("Sürükleniyor");
  },
  yenidenBoyutlandir() {
    console.log("Boyut değiştiriliyor");
  }
};

Intersection tipler, özellikle bir nesnenin birden fazla davranışı aynı anda taşıması gereken durumlarda kullanılır.

Literal Types (Sabit Değer Tipleri)

Literal types, bir değişkenin sadece belirli sabit değerleri alabilmesini sağlar. Bu, özellikle sınırlı sayıda geçerli seçenek olduğunda kullanışlıdır.

tsx
let durum: "basladi" | "beklemede" | "bitti";

durum = "basladi";  // geçerli
durum = "iptal";    // hata: 'iptal' literal tipler arasında değil

Bu sayede hatalı değerlerin atanması engellenmiş olur.

Nullable Types (null ve undefined ile Çalışmak)

Varsayılan olarak TypeScript, null ve undefined gibi değerlerin bir değişkene atanmasına izin vermez. Ancak bazı durumlarda verinin olmayabileceği bilinçli olarak belirtilmek istenebilir. Bu gibi durumlarda nullable types kullanılır.

tsx
let isim: string | null = null;
isim = "Ali";

Bu kullanım, değişkenin null olabileceğini açıkça ifade eder.

strictNullChecks Ayarı

TypeScript’te strictNullChecks ayarı açık olduğunda, bir değişkenin null ya da undefined olup olmadığı kontrol edilmeden kullanılmasına izin verilmez. Bu da potansiyel hataları erken aşamada yakalamayı sağlar.

Ayar, tsconfig.json dosyasında şu şekilde etkinleştirilir:

json
"strictNullChecks": true

Bu ayar aktifken, TypeScript seni olası null ve undefined hatalarına karşı uyarır.

Optional Chaining (?.)

Optional chaining operatörü, bir nesne veya değişkenin tanımlı olup olmadığını kontrol ederek ona ulaşmanı sağlar. Tanımsız (undefined) olan bir nesneye doğrudan erişmeye çalışmak normalde hataya yol açar. ?. sayesinde bu engellenir.

tsx
let musteri = {
  adres: {
    sehir: "İzmir"
  }
};

console.log(musteri.adres?.sehir); // varsa sehir'i gösterir, yoksa hata vermez

Bu özellik sayesinde uygulamalar daha stabil çalışır.

Optional Element Access (?.[index])

Bir diziye erişirken, dizinin boş veya undefined olabileceği durumlarda ?.[index] operatörü kullanılır.

metin
let kullanicilar: string[] | undefined;

console.log(kullanicilar?.[0]); // varsa ilk kullanıcıyı verir, yoksa hata vermez

Bu da dizilerle çalışırken hata olasılığını azaltır.

Optional Call Operator (?.())

Bir fonksiyon tanımlanmışsa çalıştır, tanımlanmamışsa hata verme diyorsak, optional call operator kullanılır. Bu, özellikle dışardan gelen fonksiyon referanslarında işe yarar.

tsx
let logla: ((mesaj: string) => void) | undefined;

logla?.("Sistem başladı"); // tanımlıysa çalıştırır, değilse geçer

Bu operatör, uygulamanın durmasını engelleyerek esnekliğini artırır.

Sonuç

TypeScript’in ileri düzey tip özellikleri sayesinde daha esnek, daha güvenli ve daha bakımı kolay uygulamalar geliştirmek mümkündür. Union types ile birden fazla durumu kontrol altında tutabilir, intersection types ile tipleri birleştirebilir, literal types ile belirli değerleri zorunlu kılabilir ve nullable types ile eksik verilerle doğru şekilde çalışabilirsin.

Ayrıca optional chaining ve onun çeşitleri, kodun daha kısa ve hataya dayanıklı yazılmasını sağlar. Bu özellikler, özellikle gerçek dünya uygulamalarında karşılaşılan belirsiz durumları daha sağlam şekilde yönetmek için oldukça önemlidir.

Bu temel ve ileri düzey bilgilerle, TypeScript’in tip sistemine çok daha hâkim bir şekilde projelerini geliştirmeye devam edebilirsin.

TypeScript’te Nesneler (Objects) ve Tip Yönetimi
TypeScript Dersleri3 dk okuma

TypeScript’te Nesneler (Objects) ve Tip Yönetimi

TypeScript, JavaScript’in üzerine geliştirilmiş, tip güvenliği sağlayan bir programlama dilidir. En güçlü özelliklerinden biri, nesnelerin yapısını önceden belirleyebilmemiz ve bu sayede kodumuzu daha sağlam ve anlaşılır hale getirebilmemizdir. Bu yazıda, TypeScript’te nesne (object) t

Yazıyı oku
TypeScript’te Fonksiyonlar ve İlgili Ayarlar
TypeScript Dersleri3 dk okuma

TypeScript’te Fonksiyonlar ve İlgili Ayarlar

TypeScript’te fonksiyonlar, yalnızca kodu düzenli hale getirmek için değil, aynı zamanda hataları erken yakalamak ve daha güvenli yazılım geliştirmek için büyük önem taşır. Bu yazıda TypeScript’te fonksiyonları nasıl tanımlarız, nasıl daha güvenli hale getiririz ve hangi ayarlarla yazdığımız f

Yazıyı oku

Çerez tercihlerin

Platformun çalışması için zorunlu çerezler kullanıyoruz. İzin verirsen anonim kullanım verilerini ölçüyoruz. Ayrıntıları incele