typescript - Fonksiyon imzasını doğrulama - arayüz vs tür takma adı
Aşağıdaki fonksiyona sahibim:
function (n: number) {
return {s: n};
}
İmza için bir doğrulayıcı oluşturmam gerekiyor. Okuduklarıma göre iki seçeneğim var:
Arayüz
interface ValidatorFnInterface {
(n: number): {
[key: string]: any;
};
}
Tür takma adı
type ValidatorFnType = (n: number) => {
[key: string]: any
};
Ve böyle kullanılabilirler:
let f1: ValidatorFnInterface = function (n: number) {
return {s: n};
};
let f2: ValidatorFnType = function (n: number) {
return {s: n};
};
Typescript lib.d.ts tür takma adları kullanıyor gibi görünüyor, oysa angular2 kodu interface kullanıyor gibi görünüyor. Sorum şu: hangi durumda hangisini kullanmalıyım? Karar verirken kullanmam gereken bir mantık var mı yoksa tamamen tercihe mi bağlı?
Cevap #1
Şu anda TypeScript'te sınıflar yalnızca arayüzleri uygulayabilir, rastgele türleri değil. Bu nedenle genel olarak, eğer diğer sınıfların türlerinizi bir şey olarak uygulayabilmesini istiyorsanız, arayüzleri kullanmalısınız. Benzer şekilde arayüzler yalnızca diğer arayüzleri uzatabilir.
Arayüzlerin olumsuz yanına gelince, kesişim veya birleşim türlerini ifade edemezler, bu nedenle bunu tek bir türde istiyorsanız, tür takma adlarıyla sınırlısınız.
Cevap #2
Hem tip alias'ları hem de arayüzler geçerli olup verilen bağlamda çalışacak olsa da, duruma bağlı olarak her birinin artıları ve eksileri vardır. Tip, fonksiyon imzaları, birleşim tipleri ve karmaşık eşlenmiş veya koşullu tipler için en iyi şekilde kullanılabilir. Bu arada, arayüz, ortak API sözleşmeleri, bildirim birleştirme ve sınıflarla çalışırken veya OOP tarzını uygularken daha iyi bir seçenek olacaktır. Bu, aşağıdaki tabloda özetlenmiştir:
TypeScript lib.d.ts, yerleşik fonksiyon türleri tip alias’ları ile daha basit ve tip alias’larıyla daha iyi ifade edildiği için tip alias’ları kullanır. Bu, her şeyi okunabilir ve özlü tutar.
Genel olarak, tip takma adlarını mı yoksa arayüzleri mi kullanacağınız esas olarak kişisel tercihe bağlıdır. Ancak, bazı durumlarda birini diğerine tercih etmek daha faydalı olabilir.
