Kesişim türleri (&, intersection types), birden fazla türü tek bir türde birleştirerek bir araya getirir ve birleştirilen türlerin tüm özelliklerini taşır.
type Person = { name: string }; type Worker = { job: string }; type WorkingPerson = Person & Worker; // { name: string; job: string } const wp: WorkingPerson = { name: "Leo", job: "Dev" };
Bu, genişletilebilir sözleşmelerin bileşimini sağlamak ve karmaşık türlerin primitiflerden oluşturulmasında faydalıdır.
Ancak, uyumsuz türler kesişirse (örneğin, type A = { foo: string } ve type B = { foo: number }), başlatılamayan bir tür elde edilir.
type A = { foo: string }; type B = { foo: number }; type C = A & B; // C = { foo: never }
İki türü kesiştirirseniz ve her birinde uyumsuz veri türlerine sahip aynı alan varsa ne olur?
Cevap: never türünde bir alan elde edilir, çünkü değer aynı anda hem string hem de number olamaz. Böyle bir tür geçerli bir şekilde uygulanamaz.
type T1 = { id: string }; type T2 = { id: number }; type T3 = T1 & T2; // { id: never }
Hikaye
Projede farklı kütüphanelerden türler kesiştirildi ve farklı veri türlerine sahip aynı alanlar gözden kaçırıldı. Sonuçta, geçerli bir nesne oluşturma yeteneğini engelleyen 'imkansız' (never) türü oluştu.
Hikaye
Geliştiricinin DTO ve alan varlık türlerini "birleştirmesi" gerekiyordu. Kesişme sırasında iki uyumsuz özellik bulundu ve elde edilen türü kullanma girişimi belirsiz derleme hatalarına neden oldu. Geliştirici, nedenini anlamadan önce hata ayıklamak için zaman harcadı.
Hikaye
Mikro hizmetlerden birinde, istek gövdesini tanımlamak için bir kesişik tür ilan edildi. API değişikliği nedeniyle bir özelliğin veri türü değişti ve yeni değişiklikler hemen derleme hatasına yol açmadı — sorunlar yalnızca dağıtım sonrası çalışma zamanında ortaya çıktı.