@Timofei1997

Как реализуется enum в JS из Typescript?

Есть код в ts:
enum Membership {
    Simple,
    Standart,
    Premium
}


После компиляции в js он выглядит следующем образом:
var Membership;
(function (Membership) {
    Membership[Membership["Simple"] = 0] = "Simple";
    Membership[Membership["Standart"] = 1] = "Standart";
    Membership[Membership["Premium"] = 2] = "Premium";
})(Membership || (Membership = {}))
Можете, пожалуйста, объяснить, что выполняет эта часть кода: (Membership || (Membership = {})


И почему это всё обёрнуто в функцию?
  • Вопрос задан
  • 380 просмотров
Решения вопроса 2
Aetae
@Aetae Куратор тега JavaScript
Тлен
Потому что enum в typescript может мержиться:
Валидный код:
enum Membership {
  Simple,
  Standart,
  Premium
}

enum Membership {
  SimpleX = 99
}

Почему компилятор не собирает его воедино, если такие штуки тока на этапе компиляции работают - я хз, но наверное есть причины.
Ответ написан
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Можете, пожалуйста, объяснить, что выполняет эта часть кода: (Membership || (Membership = {})
Если в Membership не falsy значение (например объект), то передать ссылку на него в функцию, иначе (если в Membership undefined) присвоить в Membership новый объект и передать ссылку на него в функцию

И почему это всё обёрнуто в функцию?
Сложно сказать, думаю кто-то скопировал код отсюда в код сюда и не стал париться, так как в обоих случаях есть declaration merging, о котором уже написал Aetae

А вообще стоит узнать про const enum, который не оставляет артефактов в JS и в подавляющем большинстве случаев его достаточно.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 нояб. 2024, в 00:55
500 руб./за проект
21 нояб. 2024, в 23:30
300000 руб./за проект
21 нояб. 2024, в 22:21
3000 руб./в час