CodeBlanks Logo Icon CodeBlanks

Mapped type nedir?

Türlerin üzerinde dönen mapped types'ı öğrenirsin.

Mapped type nedir?

Mapped type, bir türün tüm özellikleri üzerinde dönen ve her birini dönüştüren bir tür yapısıdır. [K in keyof T] sözdizimi, T'nin her anahtarı K için bir özellik üretir. Sağ taraftaki tür ifadesi, orijinal değerin türü T[K] ile oynayarak yeni tür üretir.

type Ayni<T> = {
  [K in keyof T]: T[K];
};
// T'nin tüm özellikleri aynı türle
// kopyalanır

Mapped type'ın gücü

Mapped type, bir türü alıp her özelliğini aynı kurala göre dönüştürür. Değer türünü değiştirebilir, readonly ekleyebilir veya ? ile isteğe bağlı yapabilirsin. Bu, Partial veya Readonly gibi yerleşik utility types'ların temelidir; onları kendin de yazabilirsin.

Uygulama Tüm değerleri string yap

MetinYap<T> mapped type'ını yaz: { [K in keyof T]: string }. Ayar arayüzünü tema: string ve ses: number özellikleriyle tanımla. AyarMetin türünü MetinYap<Ayar> olarak tanımla. a değişkenine { tema: "koyu", ses: "acik" } nesnesini (tür AyarMetin) ata. a.tema'yı console.log ile yazdır.

Başlangıç kodu

index.ts
// MetinYap<T> mapped type tanımla
// T'nin her özelliğini string değerli yap
// Ayar arayüzünü tema ve ses ile tanımla
// AyarMetin türünü MetinYap<Ayar> olarak tanımla
// a değişkenine uygun nesneyi ata
// tema değerini yazdır

Örnek çözüm

index.ts
type MetinYap<T> = {
  [K in keyof T]: string;
};
interface Ayar {
  tema: string;
  ses: number;
}
type AyarMetin = MetinYap<Ayar>;
const a: AyarMetin = { tema: "koyu", ses: "acik" };
console.log(a.tema);

Beklenen çıktı

koyu

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Aşağıdaki mapped type ne yapar?

index.ts
type NumYap<T> = { [K in keyof T]: number };
  • T'nin tüm özelliklerini readonly yapar
  • T'nin tüm özelliklerini number türüne dönüştürür Doğru cevap
  • T'nin tüm özelliklerini çıkarır
  • T'nin tüm özelliklerini isteğe bağlı yapar

Açıklama: Sağ taraftaki tür number olduğundan, her özellik K için değer türü number olur. Özellik adları T'den gelir ama değer türü number'a dönüşür.

2 Mapped type gövdesi

Soru
type Dize<T> = {
  [K in ____]: string;
};
Cevap
type Dize<T> = {
  [K in keyof T]: string;
};

Açıklama: Mapped type, T'nin anahtarları üzerinde dönmeli; bu yüzden [K in keyof T] yazılır. Yalnızca T bir sınır değildir; string tüm adları kabul eder; keyof K yanlış yöndedir.

3 Mapped type parçaları

Kavram Anlamı
[K in keyof T] T'nin özellikleri üzerinde döner
T[K] Orijinal özelliğin değer türü
: string Yeni değer türü
type NumYap<T> Mapped type alias

Orta seviye bölümündeki tüm dersler