2015-10-29 10 views
6

私はTypeScript 1.6を使用しています。抽象メソッドで抽象クラスを作成したいが、具体クラスではラムダ/矢印関数を使用します。ラムダ/矢印関数を使用したTypeScript抽象メソッド

これは可能ですか?それは

「クラス 『ベース』が 『DEF』インスタンスのメンバ関数を定義していますが、拡張されたクラスのコンクリート」は、インスタンスのメンバプロパティとしてそれを定義する」と言うと、以下に示すコードは...

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

答えて

2

をコンパイルしていません活字体仕様の私の理解では、Baseクラスにmethoddefと呼ばれていないあなたが

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

を宣言しているときは、実際にpropertyを宣言していることです。

プロパティは、(残念ながら私見)活字体で抽象化することはできません。確かに、エラーメッセージになるだろうhttps://github.com/Microsoft/TypeScript/issues/4669

+0

は多くの意味をなします。残念なことに、私のdefメソッドは、約束を返す関数への呼び出しを行い、約束のコールバックの中で「これ」を参照する必要があります。したがって、ラムダ/矢印関数を使用する理由があります。 したがって私は他の唯一のオプションはvar self = thisを使うことだと思います。等 –

関連する問題