@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 = {})


И почему это всё обёрнуто в функцию?
  • Вопрос задан
  • 340 просмотров
Решения вопроса 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 и в подавляющем большинстве случаев его достаточно.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
summer Ярославль
от 100 000 до 140 000 ₽
КРАФТТЕК Санкт-Петербург
от 60 000 до 80 000 ₽
18 апр. 2024, в 21:56
2000 руб./за проект
18 апр. 2024, в 21:00
150 руб./за проект