ProgramlamaFrontend geliştirici

TypeScript'teki `readonly` anahtar kelimesi hakkında konuşun. Ne zaman ve nasıl uygulanmalıdır? `const` ile karşılaştırıldığında özellikleri nelerdir?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

TypeScript'teki readonly anahtar kelimesi, nesnelerin ve dizilerin özellikleri için, başlatıldıktan sonra değişikliğe izin vermemek için kullanılır:

  • Alanın değeri ayarlandıktan sonra değiştirilemeyeceğini sağlamak için arayüzlerin, türlerin ve sınıfların tanımında kullanılır.
  • readonly yalnızca nesne özelliklerine uygulanır, değişkenlere değil.
  • const'tan farklı olarak, bir değişkenin yeniden atanamayacağını belirtirken, nesnenin içeriğinin değiştirilmesine izin verir; readonly ise alanın veya dizi elemanının değiştirilmesini tam anlamıyla yasaklar.

Örnek:

interface User { readonly id: number; name: string; } const user: User = { id: 1, name: 'Anna' }; user.id = 2; // Hata: Cannot assign to 'id' because it is a read-only property.

Diziler için:

const nums: readonly number[] = [1, 2, 3]; nums.push(4); // Hata: Property 'push' does not exist on type 'readonly number[]'.

Kandırmaca Soru.

TypeScript'te const ve readonly arasındaki fark nedir? Birbirlerinin yerine geçebilirler mi?

Cevap: Hayır, geçemezler. const, değişkenin kendisine bir kısıtlama (yeniden atanamaz) getirirken, readonly belirli nesne özellikleri veya dizi elemanları üzerinde bir kısıtlama getirir, ancak değişkenin kendisi değiştirilebilir (kontekste izin verilirse).

Örnek:

const arr: readonly number[] = [1, 2, 3]; // arr = [2, 3, 4]; // const nedeniyle hata // arr[0] = 5; // readonly nedeniyle hata

Tarih

Finansal platform projesinde, kullanıcı verileri ile çalışırken readonly number[] yerine normal diziler number[] kullanıldı. Bu nedenle bir fonksiyon, verileri kazara değiştirdi - dizilerdeki toplam değerler farklı yerlerde kullanıldığından, raporların tutarsızlığına yol açtı. Hata birkaç gün sonra fark edildi ve şirkete veri denetimi ve geri yükleme süresi kaybettirdi.


Tarih

İç API'de const ve readonly karıştırıldı, const user: User ifadesinin alanların değiştirilmesini engelleyeceği düşünüldü. Sonuç olarak, TDK'ya göre uygun olmamasına rağmen, nesne alanları değiştirilmesi mümkün oldu. Farklılıkların bilinmemesi, hizmetler arasında gizli veri sızıntılarına yol açtı.


Tarih

Açık kaynak kütüphanesinde, bir arayüz tanımında readonly unuttuğundan, bir veri yapısını kazara değiştirilebilir hale getirdi. Bu, dış geliştiricilerin çalışma zamanında özel verilere müdahale etmesine izin verdi ve ortaya çıkan hataların düzeltimi için yeniden yapılandırma gerektirdi.