Enums în TypeScript
Un enum este un fel special de „clasă” care conține un grup de constante — valori care nu pot fi schimbate.
Enums există în două variante: enums de tip string și enums numeric.
Începem cu enums numerice.
Enums numerice - implicit
În mod implicit, un enum dă primului său membru valoarea 0 și adaugă 1 pentru fiecare membru care urmează.
Exemplu
North este 0, East este 1 și așa mai departe. Atribuirea șirului simplu 'North' unei variabile de tipul enum este o eroare de compilare — doar membrii enum-ului sunt valori valide.
CardinalDirections cu membrii North, East, South, West (fără valori explicite), atribuie CardinalDirections.North unei variabile și afișeaz-o (0), apoi atribuie șirul 'North' aceleiași variabile, astfel încât compilatorul să raporteze că un șir nu poate fi atribuit tipului enum.
Ieșire: program TypeScript și rezultatul capturat
enum CardinalDirections {
North,
East,
South,
West
}
let currentDirection = CardinalDirections.North;
// afișează 0
console.log(currentDirection);
// generează eroare, deoarece 'North' nu este un enum valid
currentDirection = 'North'; // Eroare: "North" nu poate fi atribuit tipului 'CardinalDirections'.
Enums numerice - inițializate
Poți da primului membru o valoare de pornire. Membrii următori numără apoi automat în sus de la acea valoare.
Exemplu
North este setat la 1, deci East devine 2, South 3 și West 4.
CardinalDirections în care North este setat la 1, iar East, South, West nu primesc nicio valoare explicită, apoi afișează CardinalDirections.North (1) și CardinalDirections.West (4).
Ieșire: program TypeScript și rezultatul capturat
enum CardinalDirections {
North = 1,
East,
South,
West
}
// afișează 1
console.log(CardinalDirections.North);
// afișează 4
console.log(CardinalDirections.West);
Enums numerice - complet inițializate
Poți, de asemenea, să dai fiecărui membru propriul număr unic.
Când faci asta, nicio valoare nu mai este incrementată automat — fiecare membru păstrează exact numărul pe care l-ai scris.
Exemplu
Fiecare cod de stare HTTP este scris explicit, deci StatusCodes.NotFound este 404, iar StatusCodes.Success este 200.
StatusCodes cu NotFound = 404, Success = 200, Accepted = 202 și BadRequest = 400, apoi afișează StatusCodes.NotFound (404) și StatusCodes.Success (200).
Ieșire: program TypeScript și rezultatul capturat
enum StatusCodes {
NotFound = 404,
Success = 200,
Accepted = 202,
BadRequest = 400
}
// afișează 404
console.log(StatusCodes.NotFound);
// afișează 200
console.log(StatusCodes.Success);
Enums de tip string
Enums pot conține și valori de tip string.
Enums de tip string sunt mai des întâlnite decât cele numerice, pentru că valorile lor sunt mai ușor de citit și fac intenția mai clară.
Notă: Din punct de vedere tehnic poți amesteca valori string și numerice în același enum, dar se recomandă să nu faci asta.
Exemplu
Fiecărui membru i se dă o valoare de tip string, așa că afișarea lui CardinalDirections.North tipărește textul North, nu un număr.
CardinalDirections în care North, East, South și West sunt setați fiecare la propriul nume sub formă de șir, apoi afișează CardinalDirections.North („North”) și CardinalDirections.West („West”).
Ieșire: program TypeScript și rezultatul capturat
enum CardinalDirections {
North = 'North',
East = "East",
South = "South",
West = "West"
};
// afișează "North"
console.log(CardinalDirections.North);
// afișează "West"
console.log(CardinalDirections.West);