Как реализуется enum в JS из Typescript?
Потому что enum в typescript может мержиться:
Валидный код:
enum Membership {
  Simple,
  Standart,
  Premium
}

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

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

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