Readonly mapped type
- TypeScript kursu
- Orta seviye
- Ders 33/89
- 4 dk
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
// 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
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?
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
type Sabit<T> = {
____ [K in keyof T]: T[K];
};
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 |