2015-10-29 18 views
6

Sto utilizzando TypeScript 1.6 e vorrei creare una classe astratta con un metodo astratto ma utilizzare una funzione lambda/freccia nella classe concreta.Metodo astratto di tipoScript che utilizza la funzione lambda/freccia

È possibile? Il codice riportato di seguito non viene compilato come si dice

"Class 'Base' definisce la funzione esempio membro 'def', ma classe estesa 'Concrete' lo definisce come proprietà del membro esempio" ...

abstract class Base { 
    abstract abc(): void; 
    abstract def(): void; 
} 

class Concrete extends Base { 
    private setting: boolean; 

    public abc(): void { 
     this.setting = true; 
    } 

    public def =(): void => { 
     this.setting = false; 
    } 
} 

risposta

2

la mia comprensione delle specifiche tipografico è che quando si dichiara

public def =(): void => { 
    this.setting = false; 
} 

in realtà si sta dichiarando un property chiamato def e non un method sulla classe Base.

proprietà non possono (purtroppo IMHO) essere astratte a macchina: https://github.com/Microsoft/TypeScript/issues/4669

+0

che certamente rendere il messaggio di errore ha molto più senso. Sfortunatamente, il mio metodo def effettua una chiamata a una funzione che restituisce una promessa e all'interno del callback di promessa ho bisogno di fare riferimento a "questo", quindi il motivo per cui voglio usare una funzione lambda/freccia. Quindi suppongo che la mia unica altra opzione sia usare var self = this; eccetera –

Problemi correlati