Accesează 'this' din JavaScript din TypeScript


În prezent, lucrez cu biblioteca AlpacaJS în proiectul meu TypeScript. Această bibliotecă JavaScript/JQuery este inclusă în clasa mea TypeScript și îmi cere să transmit câteva opțiuni într-un obiect de tip JSON astfel:

this.options = {
    "collapsible": false,
    "fields": {
        "id": {
            "events": {
                "change": function () {
                    console.log(this.getValue());
                }
            }
        }
    }
};

Trecând acest obiect, spun: adaugă un eveniment de schimbare câmpului „id” în cadrul formularului pe care Alpaca îl generează. Folosind „this” în cadrul acelei funcții îmi dă „this” al bibliotecii, și NU „this” al clasei TypeScript.

Problema: Ce se întâmplă dacă vreau să apelez o metodă sau o variabilă din clasa mea Typescript? Ar trebui să folosesc "this", dar "this" este legat de this-ul din alpaca/javascript. Nu pot să îl schimb în (event) => { ... } sau { ...}.bind(this) pentru că în acest fel POT accesa this-ul din Typescript, dar NU POT accesa this-ul din alpaca/javascript, am nevoie de ambele...

Răspuns #1

Nu pot accesa alpaca/javascript acesta, am nevoie de ambele

Folosește trucul standard din JavaScript de a captura this înainte de a crea funcția:

let _self = this;
this.options = {
    "collapsible": false,
    "fields": {
        "id": {
            "events": {
                "change": function () {
                    console.log(_self.getValue());  // the class instance
                    console.log(this); // the lib version 
                }
            }
        }
    }
};

Acest sfat este documentat aici de asemenea: https://basarat.gitbooks.io/typescript/content/docs/arrow-functions.html