CodeBlanks Logo Icon CodeBlanks

Özet - Mapped types

Mapped types'larla kendi utility tipini yazarsın.

Özet - Mapped types

Mapped types, bir türün özellikleri üzerinde dönüp her birini dönüştüren tür yapılardır. [K in keyof T]: T[K] ile özellikleri kopyalar; readonly ile değiştirilemez; ? ile isteğe bağlı yaparsın. Bu üçünü birleştirerek kendi utility type'larını yazabilirsin.

type Guvenli<T> = {
  readonly [K in keyof T]?: T[K];
};

Uygulama Kendi utility tipin

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

Başlangıç kodu

index.ts
// Guvenli<T> mapped type tanımla
// T'nin tüm özelliklerini hem readonly hem isteğe bağlı yap
// Ayar arayüzünü tema ve ses ile tanımla
// GuvenliAyar türünü Guvenli<Ayar> olarak tanımla
// a değişkenine yalnızca tema içeren nesneyi ata
// tema değerini yazdır

Örnek çözüm

index.ts
type Guvenli<T> = {
  readonly [K in keyof T]?: T[K];
};
interface Ayar {
  tema: string;
  ses: number;
}
type GuvenliAyar = Guvenli<Ayar>;
const a: GuvenliAyar = { tema: "koyu" };
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 Bir mapped type'ta hem değişmezlik hem isteğe_optionallık istiyorsun. Hangi yazım doğru?

  • { [K in keyof T]: T[K]? readonly }
  • { [readonly K in keyof T]?: T[K] }
  • { [K in keyof T]: readonly T[K] }
  • { readonly [K in keyof T]?: T[K] } Doğru cevap

Açıklama: readonly köşeli parantezden önce, ? ise hemen sonra yazılır. Böylece her özellik hem değiştirilemez hem isteğe bağlı olur. Diğer yazımlar sözdizimi hatası verir.

2 Birleşik mapped type gövdesi

Soru
type Guvenli<T> = {
  ____ [K in keyof T]?: T[K];
};
Cevap
type Guvenli<T> = {
  readonly [K in keyof T]?: T[K];
};

Açıklama: Tüm özellikleri değiştirilemez yapmak için köşeli parantezden önce readonly yazılır. ? zaten isteğe_optionallık için var; optional anahtar kelime değildir; static ve const farklı amaçlara hizmet eder.

3 Mapped type dönüştürmelerini eşleştir

Kavram Anlamı
[K in keyof T]: T[K] Tüm özellikleri aynen kopyalar
readonly [K in keyof T]: T[K] Tüm özellikleri değiştirilemez yapar
[K in keyof T]?: T[K] Tüm özellikleri isteğe bağlı yapar
readonly [K in keyof T]?: T[K] Hem değiştirilemez hem isteğe bağlı

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