Intersection types
- TypeScript kursu
- Başlangıç
- Ders 60/89
- 4 dk
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
// 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
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?
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
type Person = HasName ____ HasAge;
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 |