I like TypeScript but I've found that it can give a false sense of security with regards to the (in)famous this. When writing JavaScript, or anything that compiles to it, it is imperative to be wary of scope. Let's look at a little example; imagine we are translating the following JavaScript:

function MyViewModel() {
    var self = this;
    //...

    function MyFunction() {
        myArray.forEach(function (item) {
            self.Process(item);
        });
    }

    //...
}

And, in partially-translated TypeScript:

class MyViewModel() {
    //...

    public MyFunction() {
        myArray.forEach(function (item) {
            this.Process(item);
        });
    }

    //...
}

While it may be the instinctive thing to do, using the function construct can actually cause problems here. One might expect that TypeScript alters all this references to ensure they always point to the instance of the containing class. However, in order to retain compatibility with plain JS, any this references inside a function() block are not altered by TypeScript's usual fixes to this! In the above example this would cause an error finding the function this.Process. When writing TypeScript the (params) => { } notation should be used for anonymous functions that do not rely upon JS scope and may reference members on this instance. I would recomment only using function() for the edge cases where the JS scope behaviour is necessary - JQuery in particular makes heavy use of functions with altered scope.

There is one more point to consider - when a function is passed to an external library, especially one not written in TypeScript. For example:

$('#myElem').on('hover', this.MyHoverFunc);

This looks innocent enough, doesn't it? Not quite. JQuery may well (and often does) alter the scope before calling your function, thus leading to issues in referencing inside the passed function. This is not specific to JQuery and applies to any external library. If you're not sure, functions can be safely passed by using bind to fix their scope:

$('#myElem').on('hover', this.MyHoverFunc.bind(this));