Başlık: Başlangıç

    Birçok nesne tabanlı dillerde geçerli olan Enum veri tipi artık TypeScript’de de geçerlidir.

    En basit haliyle birden fazla metin, sayı veri tipini tek bir koleksiyon içerisinde tanımlaya olanak sağlar.

    Üç enum veri tipi vardır.

    1. Sayı Numaralandırma – Numeric Enum

    Sayı Tabanlıdır. Metin ifadeleri sayı olarak tutar.

    enum PrintMedia {
    Newspaper,
    Newsletter,
    Magazine,
    Book
    }

    Örnekteki Enum tipindeki PrintMedia değişkenindeki her bir değişken bir fazla sırayla sayı değeri alır.

    Örnekteki çıktı:

    Newspaper = 0
    Newsletter = 1
    Magazine = 2
    Book = 3

    Enum veri tipinde olacak değişkenlere direk değerde atanabilir. Numaralandırmanın başlangıcı tanımlanabilir. (Aşağıdaki örnekte ilk değişken bir ile başlar, diğer değişkenler sırayla 2,3 ve 4 değerlerini alır.)

    enum PrintMedia {
      Newspaper = 1,
      Newsletter,
      Magazine,
      Book
    }

    Enum üyelerine sıralı değerler atamak gerekli değildir. Herhangi bir değere sahip olabilirler.

    enum PrintMedia {
        Newspaper = 1,
        Newsletter = 5,
        Magazine = 5,
        Book = 10
    }

    Enum, aşağıda gösterildiği gibi, bir fonksiyon parametresi veya dönüş tipi olarak kullanılabilir:

    enum PrintMedia {
        Newspaper = 1,
        Newsletter,
        Magazine,
        Book
    }
    
    function getMedia(mediaName: string): PrintMedia {
        if (  mediaName === 'Forbes' || mediaName === 'Outlook') {
            return PrintMedia.Magazine;
        }
     }
    
    let mediaType: PrintMedia = getMedia('Forbes'); // returns Magazine

    Hesaplamalı Enum – Computed Enum

    Enum tanımlamaları fonksiyonlar ve hesaplamalı tanımlar içerebilir. Sadece dikkat edilmesi gereken husus, hesaplamalı tanımlardan sonra gelen değişkene değer ataması yapılmalıdır.

    enum PrintMedia {
        Newspaper = 1,
        Newsletter = getPrintMediaCode('newsletter'),
        Magazine = Newsletter * 3,
        Book = 10
    }
    
    function getPrintMediaCode(mediaName: string): number {
        if (mediaName === 'newsletter') {
            return 5;
        }
    }
    
    PrintMedia.Newsetter; // returns 5
    PrintMedia.Magazine; // returns 15

    2. Metin İfadeleri Numaralandırma – String Enum

    Numeric Enum’a benzerlik gösterir. En büyük farkı otomatik artırma yapamaz. Bireysel olarak tek tek değer ataması yapılmalıdır.

    enum PrintMedia {
        Newspaper = "NEWSPAPER",
        Newsletter = "NEWSLETTER",
        Magazine = "MAGAZINE",
        Book = "BOOK"
    }
    // Access String Enum 
    PrintMedia.Newspaper; //returns NEWSPAPER
    PrintMedia['Magazine'];//returns MAGAZINE

    Heterojen Enum – Heterogeneous Enum

    Hem sayı hem de metin ifadesi içeren enum’lardır.

    enum Status { 
        Active = 'ACTIVE', 
        Deactivate = 1, 
        Pending
    }

    Rezerve Enum – Reserve Enum

    Bir üyenin değerine ve aynı zamanda üyenin adına erişebileceğinizi gösterir.

    enum PrintMedia {
      Newspaper = 1,
      Newsletter,
      Magazine,
      Book
    }
    
    PrintMedia.Magazine;   // returns  3
    PrintMedia["Magazine"];// returns  3
    PrintMedia[3];         // returns  Magazine