Ana içeriğe geç
Modül 6 · Ders 2 ders 2Kurstaki 12/14~15 min
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.

TS
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:

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

TS
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

Egzersiz#ts.m6.l2.e1
Denemeler: 0Yükleniyor…

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

Düzenleyici yükleniyor…
İ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

Egzersiz#ts.m6.l2.e2
Denemeler: 0Yükleniyor…

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.

Düzenleyici yükleniyor…
İ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