TypeScript / Enum

Enum

Заримдаа хувьсагч зөвхөн тодорхой тооны утгуудаас нэгийг л авдаг. Жишээ нь, долоо хоногийн өдрүүд, улирал, захиалгын төлөв. Эдгээрийг enum ашиглан илэрхийлнэ.

Enum гэдэг нь enumeration буюу "тоолох" гэсэн үгнээс гаралтай. Холбоотой тогтмол утгуудын нэрлэсэн бүлэг юм.

Үндсэн Enum

Enum-г enum түлхүүр үгээр зарлана:

typescript
enum Өдөр {
  Даваа,
  Мягмар,
  Лхагва,
  Пүрэв,
  Баасан,
  Бямба,
  Ням,
}

const өнөөдөр: Өдөр = Өдөр.Лхагва;
console.log(өнөөдөр); // 2

TypeScript enum-д автоматаар тоон утга өгдөг. Даваа = 0, Мягмар = 1, Лхагва = 2 гэх мэтчилэн.

Enum-г if нөхцөлд ашиглах нь кодыг ойлгомжтой болгодог:

typescript
if (өнөөдөр === Өдөр.Бямба || өнөөдөр === Өдөр.Ням) {
  console.log("Амралтын өдөр!");
} else {
  console.log("Ажлын өдөр.");
}

2 === 6 гэж бичихээс Өдөр.Лхагва === Өдөр.Бямба гэж бичих нь хамаагүй ойлгомжтой.

Тоон утга тогтоох

Enum-ийн эхний утгыг өөрчлөхөд дараах утгууд дагаж өөрчлөгдөнө:

typescript
enum Сар {
  Нэгдүгээр = 1, // 0-оос биш 1-ээс эхэлнэ
  Хоёрдугаар, // 2
  Гуравдугаар, // 3
  // ...
  Арванхоёрдугаар = 12,
}

console.log(Сар.Нэгдүгээр); // 1
console.log(Сар.Гуравдугаар); // 3

Эсвэл бүх утгыг гараар тогтооч болно:

typescript
enum HttpТөлөв {
  Амжилттай = 200,
  Олдсонгүй = 404,
  Серверийн алдаа = 500,
}

function хариуг шалгах(код: HttpТөлөв): void {
  if (код === HttpТөлөв.Амжилттай) {
    console.log("Хүсэлт амжилттай!");
  } else if (код === HttpТөлөв.Олдсонгүй) {
    console.log("Хуудас олдсонгүй.");
  }
}

хариуг шалгах(HttpТөлөв.Амжилттай); // Хүсэлт амжилттай!

String Enum

Тоон утгын оронд мөр (string) ашиглах нь debug хийхэд илүү тохиромжтой:

typescript
enum Захиалгын Төлөв {
  Хүлээгдэж байна = "PENDING",
  Баталгаажсан = "CONFIRMED",
  Хүргэгдсэн = "DELIVERED",
  Цуцлагдсан = "CANCELLED",
}

const захиалга: Захиалгын Төлөв = Захиалгын Төлөв.Баталгаажсан;
console.log(захиалга); // "CONFIRMED"

Тоон enum 2 харуулахад ойлгомжгүй боловч string enum "CONFIRMED" гэж шууд харагдана. Ялангуяа API хариу дотор ашиглахад маш тохиромжтой.

Бодит жишээ: хэрэглэгчийн эрх

typescript
enum Эрх {
  Зочин = "GUEST",
  Суралцагч = "STUDENT",
  Багш = "TEACHER",
  Админ = "ADMIN",
}

function хичээл нэмэх(хэрэглэгчийн эрх: Эрх): void {
  if (хэрэглэгчийн эрх === Эрх.Багш || хэрэглэгчийн эрх === Эрх.Админ) {
    console.log("Хичээл нэмэх эрх байна.");
  } else {
    console.log("Хандах эрх хүрэлцэхгүй байна.");
  }
}

хичээл нэмэх(Эрх.Суралцагч); // Хандах эрх хүрэлцэхгүй байна.
хичээл нэмэх(Эрх.Багш);      // Хичээл нэмэх эрх байна.

Enum хэзээ ашиглах вэ?

Enum ашиглах нь тохиромжтой үеийг харцгааья:

| Тохиромжтой үе | Жишээ | | --------------------------------- | -------------------------------- | | Тогтмол тоотой сонголт | Улирал, өдрүүд, сар | | Төлөв хадгалах | Захиалга, хэрэглэгчийн эрх | | Тоон кодыг нэрлэх | HTTP статус код | | Ижил бүлгийн тогтмолуудыг нэгтгэх | Өнгөний тогтмолууд, тохиргоонууд |

Ганц нэг тогтмол утга байвал enum шаардлагагүй — зүгээр const ашиглана. Гэхдээ хоёр ба түүнээс дээш хамааралтай сонголт байвал enum хамгийн тохиромжтой сонголт.

Дараагийн хичээлд:

TypeScript-ийн хамгийн аюултай хоёр төрөл болох any ба unknown-г судална. Эдгээрийг хэзээ ашиглах, хэзээ зайлсхийх нь маш чухал мэдлэг юм.