Modül dersleri (2/2)
Eşlenen Türler
Eşlenen türler, mevcut türlerin özelliklerini tek tek dönüştürerek yeni türler oluşturmanıza olanak tanır. Bunlar, keyof operatörünü kullanan anahtarlar üzerindeki döngü sözdiziminin üzerine inşa edilmiştir.
type Mapped<T> = {
[P in keyof T]: T[P];
};Bu örnek, orijinaliyle aynı olan eşlenmiş bir türü gösterir: keyof T içindeki her P anahtarı üzerinde yinelenir ve aynı T[P] türünü atar.
Değişkenlik ve İsteğe Bağlılık Değiştiricileri
readonly ve ? (isteğe bağlı) gibi değiştiricileri, bunların önüne + (ekle, varsayılan) veya - (kaldır) ekleyerek ekleyebilir veya kaldırabiliriz.
Örneğin, bir türün tüm özelliklerinden isteğe bağlılığı kaldırmak (bunları gerekli kılmak) için:
type Concrete<T> = {
[P in keyof T]-?: T[P];
};-? değiştiricisi, her özellikteki isteğe bağlılık bayrağını kaldırır.
as ile Anahtar Yeniden Eşleme
TypeScript 4.1+ sürümünde, as yan tümcesini ve şablon değişmez türlerini kullanarak eşlenen türdeki anahtarları yeniden eşleyebilirsiniz.
type WriteSetters<T> = {
[K in keyof T as `set${Capitalize<string & K>}`]: (value: T[K]) => void;
};Burada her bir özelliğin adını K set[CapitalizedKey] olarak değiştiriyoruz ve türünü bir ayarlayıcı işlevi olarak değiştiriyoruz.
Kendin dene
Alıştırma 1: Özellikleri Null Yapılabilir Hale Getirmek
Bir T nesnesini alan ve her özelliği null değerini de kabul edebilecek şekilde dönüştüren genel bir eşlenmiş tür Nullable<T> bildirin (örneğin, T[K] | null).
İpucu göster
[K in keyof T] sözdizimini kullanın: T[K] | hükümsüz; eşlenen yazı nesnesinin içinde.
3 denemeden sonra çözüm mevcut
Alıştırma 2: as ile Dinamik Alıcılar Oluşturma
T nesnesinin anahtarlarını 'get' ön ekiyle ve orijinal anahtarın büyük harflerini kullanarak dönüştüren GetterNames<T> adında bir eşlenmiş tür oluşturun (Büyük Harf Kullanımı kullanın). Örneğin, bir anahtar name ise getName olmalıdır. Özelliklerin türünü () => T[K] olarak ayarlayın.
İpucu göster
Anahtarı yeniden eşlemek için \`get\${Capitalize<string & K>}\` olarak kullanın ve özellik dönüş türü olarak () => T[K] kullanın.
3 denemeden sonra çözüm mevcut