I'm still on an earlier version of TypeScript, so I don't know if later versions have fixed this. We ran into trouble when creating knockout view models in type script. Basically, TypeScript was losing track of 'this', and the trick of using var self=this in the the "constructor" wasn't valid. We made it work, but it wasn't pretty and it certainly wasn't idiomatic typescript.
Basically the problem was that we were trying to write TypeScript like we were writing C#, instead of treating typescript like a layer on top of JavaScript.
Earlier versions of TypeScript had some significant typing issues in my experience, especially related to typechecking static fields on object instances (which you can't access through object instances -- you have to go through the class object).
Since the 0.9.5 release, I don't think I've had any particular issues with typechecking or the language. And as someone mentioned, if you use lambdas, the compiler will automatically handle performing the `var _this = this;` trick for you under-the-hood.
> we were trying to write TypeScript like we were writing C#
Yeah, you really need to approach writing TypeScript as if you are writing idiomatic JavaScript. I'm happy that I went through the JavaScript mill before discovering TypeScript, as it informed how I developed my project.
TypeScript's ES6 lambdas are actually closures over `this` as well, the compiler will insert `var _self = this;` in the enclosing scope if you have a lambda.
Yeah, you do have to know JavaScript, since TypeScript only adds a few ES6 features and types.
I've been using TypeScript (since v.9) on a project that uses Knockout.js extensively. In short, I really like it. The generics support in TS is quite good, which I think is very important for a framework like KO.
Basically the problem was that we were trying to write TypeScript like we were writing C#, instead of treating typescript like a layer on top of JavaScript.