TypeScript “this.propertyname” ist “undefined” in Lambda Funktionen beim Debgging mit VS


Seit dem ich TypeScript kenne, möchte ich es nicht mehr missen, nur leider gibt es beim Debuggen von Lambda Funktionen direkt im Visual Studio ein Problem beim Verwenden von “this”. Man muss zwar selbst keine lokale Variable “self” oder “that” anlegen der man “this” zuweist, damit man in Lambda Funktionen auf den Ursprungskontext zugreifen kann, aber wenn man dann im Debugmodus ist und die jeweilige Variable debuggen möchte steht bei “this.propertyName” immer “undefined”.

Obwohl wir die Variable entsprechend gebunden wurde und auch zugewiesen wurde, ist sie weiterhin “undefined” für den Debugger.

image

Dabei handelt es sich “nur” um ein Tooling Problem vom VS, denn TypeScript übernimmt in den Lambda Funktionen automatisch das Erstellen einer “self” Variable mit dem namen “_this”. Der Code für die init Funktion in JavaScript sieht dann folgendermaßen aus:

 TodoEditModalCtrl.prototype.init = function () {
     var _this = this;
     this.todoSrv.loadTodoItem(this.todoId).then(function (result) {
         //Unser Datum noch in ein richtiges Datum verwandeln
         result.DoDate = moment(result.DoDate).toDate();
         _this.viewModel = result;
     });
 };

und leider erkennt der aktuelle VS Debugger nicht das es sich bei dem “this” in der Lambda Funktion um “_this” handelt.

Daher verwende ich in VS das Watch Fenster und füge dort selbst “_this” oder “_this.propertyName” zur Watch hinzu. Das ist zwar nicht ganz so komfortabel wie direkt mit der Maus über die Variable, aber ich muss dafür auch nicht extra wieder eine “self” Variable anlegen und kann weiterhin “this” in Lambda Ausdrücken verwenden.

image

Damit ist es zumindest in VS möglich das “this.proertyName” wieder entsprechend zu debuggen.

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s