Let's have, for example, a Dog class:
class Dog {
    static food;
    private static static_var = 123;
    constructor(private name) {}
    speak() {
        console.log(this.name + ', I eat ' + Dog.food + ', ' + Dog.static_var);
    }
}
Compiled to JS:
var Dog = (function () {
    function Dog(name) {
        this.name = name;
    }
    Dog.prototype.speak = function () {
        console.log(this.name + ', I eat ' + Dog.food + ', ' + Dog.static_var);
    };
    Dog.static_var = 123;
    return Dog;
})();
This works equally well and is less complicated:
function Dog(name) {
    this.name = name;
}
Dog.prototype.speak = function () {
    console.log(this.name + ', I eat ' + Dog.food + ', ' + Dog.static_var);
};
Dog.static_var = 123;
Is there any (other than "aesthetic") reason for using the anonymous function wrapper?
 
     
    