Her iki mekanizma da interface ve type alias, veri yapılarının (nesneler, fonksiyonlar, karmaşık tipler) tanımlanmasına olanak tanır.
Farklar:
|) ve kesişim (&).Örnek:
interface Animal { name: string } interface Dog extends Animal { bark(): void } // tiplerin birleşimi için type alias: type MyType = string | number type Cat = Animal & { purr(): void }
Tavsiyeler:
interface kullanılması önerilir.type kullanılması önerilir.Soru: Başka bir dosyada, type alias kullanılarak tanımlanan bir tipe yeni bir alan eklenebilir mi?
Cevap:
Hayır. Type alias, başka bir dosyadan deklaratif olarak genişletilemez, bu interface'ten farklıdır.
Örnek:
// main.ts type User = { name: string } // another.ts type User = { age: number } // Hata: Duplicate identifier // interface: // main.ts interface User { name: string } // another.ts interface User { age: number } // Tamam, User = { name: string, age: number }
Hikaye
Büyük bir projede, ortak veri yapıları type alias ile tanımlandı. Başka bir paketten mevcut bir tipe alan eklenmesi gerektiğinde, type alias'ın declaration merging'i desteklemediği anlaşıldı — bu nedenle interface'e geçmek zorunda kaldık, bu da gecikmelere neden oldu.
Hikaye
Bir geliştirici arayüz ile fonksiyonları tanımladı ve ardından bir birleşim tipi (string veya fonksiyon) eklemeye çalıştı — bu durumda interface'in uygun olmadığı ve tüm tanımlamaların type alias ile kesişim/birleşim olacak şekilde değiştirilmesi gerektiği ortaya çıktı.
Hikaye
Arayüzden type alias'a geçtikten sonra genişletme sözdizimini karıştırdılar: & ile birleştirmek yerine extends kullanmaya çalıştılar. Hata geç ortaya çıktı ve nedeni hemen anlaşılamadı.