CodeBlanks Logo Icon CodeBlanks

Intersection types

Birden fazla türü birleştiren intersection'ı öğrenirsin.

Intersection type nedir?

Intersection type, birden fazla türü tek bir türde birleştirir. Türler & (ampersand) ile ayrılır. Elde edilen tür, her iki türün de tüm özelliklerine sahip olmalıdır.

interface HasName { name: string; }
interface HasAge { age: number; }
type Person = HasName & HasAge;
const p: Person = { name: "Ada", age: 30 };

Person türünden bir nesne hem name hem age içermek zorundadır.

Intersection ile türleri birleştirmek

Intersection, küçük arayüzleri tek bir türe birleştirmek için kullanışlıdır. Her arayüz bir özellik kümesinden sorumludur; ortaya çıkan tür hepsini taşır.

type Drivable = { drive(): void };
type Flyable = { fly(): void };
type FlyingCar = Drivable & Flyable;

const fc: FlyingCar = {
  drive() {},
  fly() {}
};

Bu yaklaşım, türleri küçük parçalardan oluşturmayı kolaylaştırır.

Uygulama Intersection ile çalışan tanımla

Employee arayüzünü id: number ile tanımla. Contact arayüzünü email: string ile tanımla. Worker türünü Employee & Contact olarak tanımla. describe(w: Worker): string fonksiyonu w.id + "-" + w.email döndürsün ve sonucu yazdır.

Başlangıç kodu

index.ts
// Employee arayüzünü tanımla: id: number
// Contact arayüzünü tanımla: email: string
// Worker = Employee & Contact
// describe(w: Worker): string döndürür, id ve email arasına tire koy

Örnek çözüm

index.ts
interface Employee { id: number; }
interface Contact { email: string; }
type Worker = Employee & Contact;

function describe(w: Worker): string {
  return w.id + "-" + w.email;
}

const dev: Worker = { id: 1, email: "dev@x.com" };
console.log(describe(dev));

Beklenen çıktı

1-dev@x.com

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Person (HasName & HasAge) türünden bir değişkene aşağıdakilerden hangisi atanabilir?

index.ts
interface HasName { name: string; }
interface HasAge { age: number; }
type Person = HasName & HasAge;
const p: Person = ???
  • { name: 'Ada' }
  • {}
  • { age: 30 }
  • { name: 'Ada', age: 30 } Doğru cevap

Açıklama: Intersection her iki türün özelliklerini de ister. HasName & HasAge için hem name hem age gerekir.

2 Intersection işlecini tamamla

Soru
type Person = HasName ____ HasAge;
Cevap
type Person = HasName & HasAge;

Açıklama: Intersection türleri & işleci ile birleştirir. HasName & HasAge her iki türün özelliklerini de gerektirir.

3 Intersection parçaları

Kavram Anlamı
& Türleri kesiştirir (and)
A & B A ve B'nin tüm özellikleri
Drivable & Flyable Hem sürülebilir hem uçabilir
HasName & HasAge Hem ad hem yaş gerekir

Başlangıç bölümündeki tüm dersler