Wylicza w TypeScript: co robi kod JavaScript?

Następujący TypeScript:

enum PrimaryColors { Red, Green, Blue };

Tworzy następujący JavaScript:

var PrimaryColors;
(function (PrimaryColors) {
    PrimaryColors[PrimaryColors["Red"] = 0] = "Red";
    PrimaryColors[PrimaryColors["Green"] = 1] = "Green";
    PrimaryColors[PrimaryColors["Blue"] = 2] = "Blue";
})(PrimaryColors || (PrimaryColors = {}));
;

Wstyd mi przyznać, że nie rozumiem, co robi JavaScript.
Funkcja w nawiasach polega na przypisywaniu wartości ciągu za pomocą innego przypisania jako indeksu / klucza. Nigdy wcześniej czegoś takiego nie widziałem.
A jaki jest cel (PrimaryColors || (PrimaryColors = {}) następujący po funkcji?
Jeśli odpowiedzią jest prawidłowe nauczenie się języka JavaScript, chętnie go zaakceptuję, pod warunkiem, że zawiera on sugerowane źródło, które jasno wyjaśnia, co tu widzę.

questionAnswers(3)

yourAnswerToTheQuestion