2017-05-24 20 views
2

私はいくつかの抽象メソッドを持つ抽象クラスを持っています。これらのメソッドのいくつかをオプションとしてマークする方法はありますか?Typescript抽象的なオプションのメソッド

abstract class Test { 
    protected abstract optionalMethod?(): JSX.Element[]; 
    protected abstract requiredMethod(): string; 
} 

いくつかの理由から、私は、接尾辞として?を追加することができますが、それがすべてで、私はまだ派生クラスでメソッドを実装する必要があるため何もしないように思えます。今のところ私はそれがそれが返すことができることをマークするためにこれを使用していますnullこれは基本的に貧しい人はオプションです。

protected abstract optionalMethod?(): JSX.Element[] | null; 
+1

私は、オプションの抽象メソッドがサポートされているとは思いません。対応策については、[この問題](https://github.com/Microsoft/TypeScript/issues/6413)および[このコメント](https://github.com/Microsoft/TypeScript/issues/2947#issuecomment-125914985)を参照してください。 。 – Saravana

答えて

3

抽象の概念が定義されていないものですが、継承したクラスになります。そのため、の実装なしに抽象メソッドを持つことはできません。

私はあなたがあなたの目標を達成するために、すでにお使いのベースクラスで実装非抽象メソッドを作成することをお勧め:

abstract class A { 
    protected abstract requiredMethod(): string; 
    protected emptyDefinition(): string | void {}; 
    protected optionalMethod(): string { 
     return "something optional"; 
    }; 
} 
class B extends A { 
    protected requiredMethod(): string { 
     return "something required"; 
    } 
} 
+2

私は、抽象メソッド名に '? '演算子をつけて自分自身を操作することができます。 –

+0

これはうまくいくが、抽象クラスの目的をすべて無視する特定のメソッドをオーバーライドするために、抽象クラスの実装の詳細を知る必要がある。 –

+0

この場合、空の定義を使用して常に不正行為をすることができます:protected optionalMethod():string | void {}; –

関連する問題