2015-10-29 3 views
6

Ich verwende TypeScript 1.6 und möchte eine abstrakte Klasse mit einer abstrakten Methode erstellen, aber eine Lambda/Pfeil-Funktion in der konkreten Klasse verwenden.TypeScript abstrakte Methode mit Lambda/Pfeil-Funktion

Ist das möglich? Der folgende Code entspricht nicht kompilieren, wie es sagt

„Klasse‚Base‘definiert Funktionsinstanz Mitglied‚def‘, sondern erweiterte Klasse‚Beton‘definiert sie als Beispiel Eigenschaft“ ...

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; 
    } 
} 

Antwort

2

Mein Verständnis von Typoskript Spezifikationen ist, dass, wenn Sie

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

erklären Sie sind ein property tatsächlich erklärt genannt def und kein method auf der Base Klasse.

Eigenschaften nicht (leider IMHO) in Typoskript abstrahiert werden: https://github.com/Microsoft/TypeScript/issues/4669

+0

, die sicherlich die Fehlermeldung machen würde viel mehr Sinn machen. Unglücklicherweise macht meine Def-Methode einen Aufruf an eine Funktion, die ein Versprechen zurückgibt, und innerhalb des Versprechen-Callbacks muss ich auf "dies" verweisen, daher der Grund, warum ich eine Lambda/Pfeil-Funktion verwenden möchte. Daher denke ich, meine einzige andere Option ist die Verwendung von var self = this; etc –

Verwandte Themen