Modül dersleri (2/2)
Temel Jenerikler
Geneller (genel programlama), TypeScript'in en güçlü özelliklerinden biridir. Maksimum tür güvenliğini korurken ve any kullanımını ortadan kaldırırken, farklı veri türleriyle çalışabilen esnek, yeniden kullanılabilir bileşenler, işlevler ve arayüzler yazmanıza olanak tanır.
Genel Fonksiyonlar
Jeneriği türler için bir değişken olarak düşünün. Kendisine argüman olarak iletilen değeri döndüren bir fonksiyon düşünelim:
function identity<T>(arg: T): T {
return arg;
}T harfi (Type'ın kısaltması) tür için bir yer tutucudur. identity çağırdığımızda, TypeScript iletilen bağımsız değişkenin türünü yakalar ve T öğesini otomatik olarak bu türe ayarlar:
const str = identity<string>('Hello'); // T is string
const num = identity(42); // T is number (automatically inferred!)Genel Arayüzler ve Takma Adlar
Jenerikler ayrıca genel kapsayıcıları veya veri yapılarını tanımlamak için arayüzlere ve tür takma adlarına da uygulanabilir:
interface Box<T> {
content: T;
}
const stringBox: Box<string> = { content: 'TypeScript' };
const numberBox: Box<number> = { content: 42 };Çoklu Tip Parametreleri
Birden çok tür değişkeni kullanan işlevleri veya türleri tanımlayabiliriz (örneğin, T ve U):
function mergeObjects<T, U>(obj1: T, obj2: U): T & U {
return { ...obj1, ...obj2 };
}Genel Kısıtlamalar
Bazen bir jenerik tarafından kabul edilen türleri sınırlamak isteriz. Kısıtlama eklemek için extends anahtar kelimesini kullanabiliriz.
Örneğin, genel türün her zaman length özelliğine sahip olmasını istiyorsak (dizeler veya diziler gibi):
interface HasLength {
length: number;
}
function logLength<T extends HasLength>(arg: T): void {
console.log(arg.length); // Safe! We know arg has 'length'
}
logLength('Hello'); // Valid
logLength([1, 2, 3]); // Valid
// logLength(42); // Error: number does not have a length property!Kendin dene
Alıştırma 1: Genel Kimlik İşlevi
Genel kimlik işlevini, T genel türünde bir değer parametresini kabul edecek ve onu değişiklik yapmadan döndürecek şekilde tamamlayın.
İpucu göster
Dönüş türü, parametreyle aynı genel T türü olmalıdır.
3 denemeden sonra çözüm mevcut
Alıştırma 2: Genel Kutu Paketleyici
T tür parametresini kabul eden ve T türünün içeriği adlı tek bir özelliğe sahip olan Box adlı genel bir arabirim tanımlayın.
İpucu göster
Box<T> arayüzünü kullanın { content: T; } sözdizimi.
3 denemeden sonra çözüm mevcut
Alıştırma 3: Genel Kısıtlama
arg parametresini kabul eden, getLength adında genel bir işlev yazın. arg, uzunluk özelliğine (sayı) sahip bir arayüzle sınırlandırılmalıdır. İşlev arg.length değerini döndürmelidir.
İpucu göster
Fonksiyonu getLength<T extends HasLength>(arg: T): sayı olarak bildirin ve arg.uzunluğunu döndürün.
3 denemeden sonra çözüm mevcut
Alıştırma 4: Genel Çift
İki özelliğe sahip genel bir Pair<T, U> arabirimi tanımlayın: birincisi T türünden ve ikincisi U türünden. Daha sonra, birinciyi (T türünden) ve ikinciyi (U türünden) kabul eden ve Pair<T, U> uygulayan bir nesne döndüren genel bir makePair işlevi oluşturun.
İpucu göster
İki genel parametre Pair<T, U> için sözdizimini kullanın ve makePair'i buna göre tanımlayın.
3 denemeden sonra çözüm mevcut