TypeScript'te iki tür enum desteklenmektedir:
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:
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ı).
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ı.