Salvo

WFN Üye
Konular
1,743
Mesajlar
1,765
Çözüm
0
Ticaret Puanı
0
Üyelik
6 Ay 16 Gün
Konum
İstanbul
Web Sitesi
Yok
Alanı
Belirtmemiş
1/1
Konu sahibi
Nesne yapısını tanımlarken genellikle interface ile başlayabilirsiniz; birleşim türü, tuple veya bir tür işleminin sonucu için type kullanın. Her ikisi de nesne türlerini tanımlayabilir ve çoğu basit durumda birbirinin yerine geçer. Seçimi asıl değiştiren noktalar, tanımın sonradan birleştirilmesi ve ihtiyaç duyulan türün yapısıdır.

Aynı nesneyi iki yolla tanımlamak​


interface, bir nesnenin sahip olması gereken üyeleri tanımlamak için kullanılır. type ise bir türe ad veren takma addır; bu tür bir nesne de olabilir. Örneğin aşağıdaki iki tanım, ad alanı metin olan bir nesneyi tarif eder:

Kod:
interface Kullanici {
  ad: string;
}

type Profil = {
  ad: string;
};

const kullanici: Kullanici = { ad: "Deniz" };
const profil: Profil = kullanici;

console.log(profil.ad);

Bu varsayımsal örneği TypeScript yüklü bir ortamda ornek.ts olarak kaydedin. tsc ornek.ts --strict ile derleyip oluşan JavaScript dosyasını Node.js ile node ornek.js komutuyla çalıştırdığınızda çıktı Deniz olur.

Atama geçerlidir çünkü TypeScript burada adlara değil, türlerin yapısına bakar: Kullanici, Profil için gereken ad: string alanına sahiptir. Örnekte ad değerini sayı yaparsanız tür denetimi hata verir. Bu kontrol, dışarıdan gelen bir verinin çalışma anında gerçekten doğru olduğunu kanıtlamaz.

Seçimi değiştiren farklar​


İki seçeneğin nesne tanımlamada örtüşmesi, her türü aynı biçimde ifade edebildikleri anlamına gelmez:
İhtiyaçinterfacetype
Nesne yapısını adlandırmaEvetEvet
Birleşim veya tuple türüne ad vermeDoğrudan değilEvet
Aynı kapsamda bildirimi yeniden açıp birleştirmeUyumlu bildirimlerde evetHayır
Mevcut türden yeni bir tür oluşturmaextends ile& ile kesişim dahil tür işlemleriyle
Birleşim türü, bir değerin birden fazla türden biri olabileceğini belirtir. Örneğin bir kimliğin sayı veya metin olmasını type Kimlik = number | string; ile ifade edebilirsiniz. interface ile bu birleşime doğrudan ad veremezsiniz. Benzer şekilde type Koordinat = [number, number];, iki sayıdan oluşan bir tuple türünü adlandırır.

Genişletme ve bildirim birleştirme aynı şey değildir​


Yeni bir nesne türü oluştururken bir interface başka bir uygun nesne türünü extends ile genişletebilir. Bir type takma adı da & kesişim işleciyle türleri birleştirebilir. Her iki yol da mevcut tanımı değiştirmek yerine yeni bir tür oluşturur:

Kod:
interface Kisi {
  ad: string;
}

interface Calisan extends Kisi {
  departman: string;
}

type Yonetici = Kisi & {
  ekipBuyuklugu: number;
};

Buna karşılık bildirim birleştirme, aynı kapsamda aynı adlı bir interface için yapılan uyumlu bildirimlerin tek tanım olarak ele alınmasıdır:

Kod:
interface Ayarlar {
  tema: string;
}

interface Ayarlar {
  dil: string;
}

const ayarlar: Ayarlar = { tema: "koyu", dil: "tr" };

Bu örnekte Ayarlar iki alanı da gerektirir. Aynı kapsamda aynı adlı iki type bildirimi ise birleştirilmez; yinelenen ad hatası oluşur. Interface bildirimlerinde de aynı adlı özelliklerin uyumsuz türlerle tanımlanması hatadır.

Kesişimlerde çakışmaya dikkat edin: type Sonuc = { id: string } & { id: number }; ifadesi, id için iki koşulun aynı anda karşılanmasını ister. Bu durumda özellik türü never olur; normal bir metin veya sayı bu koşulu karşılamaz. Böyle bir sonuç görürseniz birleştirdiğiniz tanımlardaki ortak alanları düzeltin.

Projenizde hangisini seçmelisiniz?​


Nesne modellerinde interface kullanmak ve birleşim, tuple veya diğer tür işlemlerinde type seçmek uygulanabilir bir başlangıç kuralıdır. Kütüphane tüketicilerinin uyumlu bildirimlerle genişletmesi amaçlanan bir nesne sözleşmesinde interface’in birleştirilebilmesi özellikle yararlıdır. Böyle bir gereksinim yoksa basit nesneler için type kullanmak da geçerlidir; mevcut projenin tutarlı tercihine uyabilirsiniz.

Her iki yapı da tür denetimi içindir ve JavaScript çıktısında çalışma zamanı doğrulaması sağlamaz. API veya kullanıcı girdisi gibi güvenilmeyen veriler için, alanların varlığını ve beklenen türlerini ayrıca çalışma anında doğrulayın.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic