ProgramlamaFullstack Geliştirici

İndeksli Erişim Türleri (tip erişimi, like T[K]) nasıl çalışır? Ne zaman uygulanır, tip yapısındaki değişimle ilgili hatalardan nasıl kaçınılır ve karmaşık nesnelerdeki rolleri nelerdir?

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

Cevap

İndeksli Erişim Türleri (ya da indeks üzerinden erişim türleri), T[K] sözdizimi ile bir nesnenin belirli bir özelliğinin veya herhangi bir anahtarının türüne atıfta bulunmamıza olanak tanır. Bu, esnek ve tip güvenli soyutlamalar oluşturmak için güçlü bir araçtır.

Örnek:
type Kişi = { ad: string; yaş: number; }; type AdTürü = Kişi['ad']; // string type YaşYadaAd = Kişi['yaş' | 'ad']; // number | string

Kapsamlı türler ve fonksiyonlar yazmak için kullanılır:

function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] { return obj[key]; // dönüş türü doğru bir şekilde tanımlanmış } const kullanıcı = { email: 'a@a.ru', id: 1 }; let id = getProperty(kullanıcı, 'id'); // id: number

Ne amaçla:

  • Yapılandırıcı türler oluşturmak için (örneğin, karmaşık iç içe yapılar içerisinden anahtar ile değer türünü çekmek).
  • İlgili türler inşa etmek (Record, Pick vb.)

İnce noktalar:

  • Temel türde değişiklik yapıldığında (Kişi) indeksle erişim sonucunun da değişeceği ve bu durumun her yerdeki binding üzerinde ani bir etkisi olabileceği!
  • TS, anahtarın mevcut olmaması durumunu yakalamaz: Kişi['maaş'] — derleme aşamasında hata verir.

Tuzaklı Soru

Soru: type Foo = {a: number, b: string}["a" | "b" | "c"] ifadesinin türü ne olur?

Cevap: Bu örnek, 'c' anahtarının erişim sağlanan türde olmadığı için derleme hatası verecektir. TypeScript hata verecektir:

Type '"c"' does not satisfy the constraint '"a" | "b"'.

Konuyla ilgili ince noktaları bilmemekten kaynaklanan gerçek hata örnekleri.


Hikaye

Projede, türlere dayalı olarak dinamik formlar oluşturuluyordu. Ana türe yeni bir alan eklenince, anahtarlarla indeksleme yapılan yerler güncellenmedi, sonuç olarak bazı özellikler forma dahil edilmedi, oysa tip düzeyinde tam bir eşleme bekleniyordu. Hata yalnızca çalışma zamanında ortaya çıktı, geliştirme aşamasında değil.


Hikaye

Verileri doğrulama kütüphanesinde indeksli erişim türleri kullanıldı, ancak kodun taşınması sırasında anahtarlardan biri nesneden üst öğeye alındı. Eski indeksli tür derleme hatasına neden oldu, ancak hata yalnızca CI'deki önbellek nedeniyle yeniden derlenince ortaya çıktı ve bundan önce staging üzerinde birkaç hafta boyunca yaşadı.


Hikaye

İndeksli Erişim Türleri sayesinde, açıkça belirtilmemiş olan herhangi bir anahtara erişilebileceği yanlış varsayıldı ve bu, dinamik özellikler için otomatik testlerin yanlış oluşturulmasına yol açtı. Sonuç olarak, testler olası senaryoların bir kısmını kapsamadı, çünkü derleyici bu durumları geçersiz olarak dışladı.