ProgramlamaFullstack geliştirici

TypeScript'te enum tipinin nasıl çalıştığı, enum türlerinin neler olduğu ve sabit değerler ile hesaplanan değerler arasındaki fark nedir? Enum kullanırken karşılaşılabilecek sorunlar nelerdir?

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

Cevap

TypeScript'te iki tür enum desteklenmektedir:

  • Sayısal (numeric) — varsayılan değerler sırasıyla, 0'dan başlayarak atanır.
  • String (string) — her değer açıkça tanımlanmalı ve bir dizedir.

Ayrıca heterojen enum’lar (karışık türler) da vardır, ancak bunların kullanımı son derece önerilmez.

Örnek:

enum Status { Init, Loading, Ready = 5, Error } // Status.Error === 6 enum HttpCode { Ok = 200, NotFound = 404, Internal = 'INTERNAL_ERROR' // Hata! Yalnızca dizeler veya yalnızca sayılar } enum Direction { Up = 'UP', Down = 'DOWN', }

Sabit değerler derleme aşamasında hesaplanır. Eğer ENUM değeri diğer hesaplamalardan veya ifadelerden (örneğin, bir fonksiyon) bağımsızsa, bu hesaplanan değer (computed member) olur. Sadece önceki enum üyeleri, geçerli üye için varsayılan bir değer olarak kullanılabilir.

Önemli özellikler:

  • Sayısal enum’lar, enum → sayı → dize-isim ters eşlemesini destekler.
  • String enum’lar — yalnızca doğrudan (isim → değer) destekler.
  • Bir enum'da türlerin karıştırılması durumunda derleme hataları meydana gelir.

Kandırmaca Soru

Yeni bir enum üyesini tanımlarken başka bir enum'un değerini kullanmak mümkün mü?

Cevap: Evet, ancak bu değer bir sabit veya daha önce tanımlanmış bir üye olmalıdır.

Örnek:

enum A { X = 1 } enum B { Y = A.X } // TAMAM

Ancak, fonksiyonlara veya diğer yerlerden veriler üzerinde hesaplama yapılması mümkün değildir (örneğin, fonksiyon çağrıları).

Konuyla ilgili ince detayların bilinmemesinden kaynaklı gerçek hata örnekleri.


Hikaye

Bir dış API'ye veri seri hale getirmek için sayısal enum kullanıldı. Enum üyelerinin sırasının değiştirilmesi, değerlerin "kaymasına" neden oldu ve dış sistemler başka sayılar almaya başladı. Bu durum, dış istemcilerde izlenemeyen yanlış durumlar yarattı ve kod denetimi olmadan tespit edilemedi.


Hikaye

Bir React projesinde, değerlerin dizelere dönüştürülebileceğini bekleyerek string ve sayısal enum'ların switch-case içinde hatalı bir şekilde kullanımı yapıldı. Uyuşmazlık nedeniyle switch doğru bir şekilde tetiklenmedi ve bileşen geçersiz bir UI döndürdü.


Hikaye

Bir kısmı bir fonksiyon aracılığıyla hesaplanan bir enum yapmaya çalışırken, TypeScript bir hata vermedi, ancak bazı derlemelerde değerler undefined çıktı. Bu durum, enum'un yollar için tanımlayıcı olarak kullanıldığı zaman yönlendirmeyle ilgili sorunlara yol açtı. Kritik hata sadece üretim paketinde tekrarlandı.