electron - typescript ställa in funktionsmedlemmar & använda detta


Jag arbetar med en Electron-app som använder TypeScript. Min main.ts skapar ett objekt av min egen CommunicationProvider-klass. Jag skulle vilja att denna klass deklarerar flera metoder (definierade i ett gränssnitt som den implementerar) men att den faktiska implementationen av dessa metoder sätts i min main.ts. Så jag deklarerade min klass som:

export class SocketIOInterceptionProvider implements IInterceptionProvider {

// IInterfaceProvider methods
show: (x?: number, y?: number) => void;
hide: () => void;
move: (x: number, y: number) => void;

constructor(port: number = 3000) {

    this.initHttpServer(port);

}

public initHttpServer(port: number): void {

    this._express.get('/show', function(req, res) {
        console.log('SHOW from ' + req.ip);
        if (this.show) this.show();    
    });
}   

}

och i main.ts satte jag implementationerna:

const provider: SocketIOInterceptionProvider = new 
SocketIOInterceptionProvider();

provider.show = (x?: number, y?: number) => { //show electron win}

Vid körning - min funktion triggas inte eftersom 'this' är odefinierad, när jag trycker på:

if (this.show) this.show(); 

Hur kan jag få 'detta' underhållet? Finns det något annat rekommenderat sätt att hantera händelser från en TS-klass?

Svar #1

’this’ gick förlorad i express callback, så jag tilldelade det till en lokal variabel för användning i express callbacks:

public initHttpServer(port: number): void {

    this._express = express();
    this._httpServer = this._express.listen(port);
    const provider=this;

    this._express.get('/show', function(req, res) {
        console.log('SHOW from ' + req.ip);
        if (provider.show) provider.show();    
    });