} -->
enum (singkatan dari enumeration) adalah fitur TypeScript untuk mendefinisikan sekumpulan nilai konstan dengan nama yang lebih deskriptif. enum berguna untuk membuat kode lebih terbaca, terorganisir, dan mudah dikelola.
Membuat kode lebih terbaca: Dengan enum, kita bisa mengganti angka atau string “magic” dengan nama yang bermakna.
Mencegah kesalahan pengetikan: Karena nilai dalam enum sudah terdefinisi, TypeScript akan memberikan error jika kita menggunakan nilai yang salah.
Mempermudah debugging: Kamu bisa melihat nama konstan di log atau error alih-alih nilai mentahnya.
Digunakan untuk state atau kategori: Cocok untuk mendefinisikan status, peran, tipe data, atau kategori lainnya.
enum UserRole {
Admin,
User,
Guest,
}
function getRole(role: UserRole) {
if (role === UserRole.Admin) {
console.log('You are an admin.')
}
}
getRole(UserRole.Admin) // Output: You are an admin.
Admin = 0, User = 1, Guest = 2, secara default nilai enum adalah angka mulai dari 0, daripada menulis angka (0) kita bisa pakai UserRole.Admin sehingga lebih mudah dibaca
kita juga bisa memberikan nilai string atau angka tertentu untuk enum:
enum Status {
Active = 'ACTIVE',
Inactive = 'INACTIVE',
Suspended = 'SUSPENDED',
}
enum HttpStatus {
OK = 200,
BadRequest = 400,
NotFound = 404,
}
function printStatus(status: Status) {
console.log(`Status is ${status}`)
}
console.log(HttpStatus.OK) // Output: 200
printStatus(Status.Active) // Output: Status is ACTIVE
kita bisa menggunakan enum untuk membatasi input ke fungsi:
enum Direction {
Up,
Down,
Left,
Right,
}
function move(direction: Direction) {
switch (direction) {
case Direction.Up:
console.log('Moving up')
break
case Direction.Down:
console.log('Moving down')
break
// ...
}
}
move(Direction.Up) // Output: Moving up
Enum cocok untuk logika seperti switch-case:
enum PaymentStatus {
Pending,
Success,
Failed,
}
function checkPayment(status: PaymentStatus) {
switch (status) {
case PaymentStatus.Pending:
console.log('Payment is pending...')
break
case PaymentStatus.Success:
console.log('Payment was successful!')
break
case PaymentStatus.Failed:
console.log('Payment failed.')
break
}
}
checkPayment(PaymentStatus.Success) // Output: Payment was successful!
Kadang, kita mungkin bertanya, “Kenapa gak pakai union type aja?”
type UserRole = 'Admin' | 'User' | 'Guest'
function getRole(role: UserRole) {
if (role === 'Admin') {
console.log('You are an admin.')
}
}