CodeBlanks Logo Icon CodeBlanks

Readonly mapped type

Mapped type ile tüm özellikleri readonly yapmayı öğrenirsin.

Readonly mapped type

Mapped type ile T'nin tüm özelliklerini readonly yapabilirsin. { readonly [K in keyof T]: T[K] } yazdığında, her özellik değiştirilemez hale gelir; değer türü aynı kalır. Bu, TypeScript'in yerleşik Readonly utility type'ının da yaptığıdır.

type Sabit<T> = {
  readonly [K in keyof T]: T[K];
};
interface Nokta { x: number; y: number; }
const n: Sabit<Nokta> = { x: 3, y: 5 };
// n.x = 10;  // derleme hatası

Değişmezlik garantisi

readonly mapped type, derleme zamanında değişmezlik sağlar. Bir nesne Sabit<T> türündeyse özelliklerine atama yapılamaz. Bu, özellikle yapılandırma veya sabit veri yapılarında yanlışlıkla değişikliği önler. Çalışma zamanında bir etkisi yoktur; yalnızca derleyici kontrol eder.

Uygulama Sabit nokta

Sabit<T> mapped type'ını { readonly [K in keyof T]: T[K] } olarak yaz. Nokta arayüzünü x: number ve y: number ile tanımla. SabitNokta türünü Sabit<Nokta> olarak tanımla. n değişkenine { x: 3, y: 5 } nesnesini (tür SabitNokta) ata. n.x'i console.log ile yazdır.

Başlangıç kodu

index.ts
// Sabit<T> mapped type tanımla
// T'nin tüm özelliklerini readonly yap, değer türü aynı kalsın
// Nokta arayüzünü x ve y ile tanımla
// SabitNokta türünü Sabit<Nokta> olarak tanımla
// n değişkenine nokta nesnesini ata
// x değerini yazdır

Örnek çözüm

index.ts
type Sabit<T> = {
  readonly [K in keyof T]: T[K];
};
interface Nokta {
  x: number;
  y: number;
}
type SabitNokta = Sabit<Nokta>;
const n: SabitNokta = { x: 3, y: 5 };
console.log(n.x);

Beklenen çıktı

3

Soru ve cevaplar

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

1 Aşağıdaki mapped type ile üretilen bir nesnede ne değişir?

index.ts
type Sabit<T> = { readonly [K in keyof T]: T[K]; };
  • Özellik değerlerinin türü değişir
  • Özellik adları değişir
  • Özellikler değiştirilemez hale gelir Doğru cevap
  • Özellikler isteğe bağlı hale gelir

Açıklama: readonly eklemek özelliklerin değiştirilmesini engeller; değer türü ve adları aynı kalır. Tür değiştirmek sağ tarafı değiştirmekle olur; isteğe_optional yapmak ? ile olur.

2 readonly ekle

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

Açıklama: Mapped type'ta tüm özellikleri değiştirilemez yapmak için readonly kullanılır. optional geçerli bir anahtar kelime değildir; const değişken içindir; static sınıf üyeleri içindir.

3 Readonly mapped type parçaları

Kavram Anlamı
readonly [K in keyof T] Tüm özellikleri değiştirilemez yapar
T[K] Değer türünü aynı tutar
n.x = 10 Derleme hatası verir
type Sabit<T> Readonly mapped type alias

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