ProgramlamaBackend TypeScript geliştiricisi

TypeScript'teki 'kesişim türleri' (intersection types) mekanizmasından bahsedin. Doğru kullanım şekilleri nelerdir ve hangi sorunlarla karşılaşılabilir?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap

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.

Örnek:

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.

Hatalı kesişim örneği:

type A = { foo: string }; type B = { foo: number }; type C = A & B; // C = { foo: never }

Kandırmaca soru

İ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 }

Konunun inceliklerine dair gerçek hata örnekleri


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ı.