2016-12-10 9 views
0

私は基本クラスと派生クラスを持っています。派生クラスのコンストラクタ引数(DerivedOptions)は、追加のものを持つBaseOptionsプロパティをすべて必要とするため、それらをインタフェースとして表現し、拡張しました。これを行う正しい方法ですか?私はまた、人々がtypeを使ってクラスに渡されるオプションを表現しているのを見ています。私はそれを使用してこの機能を達成することができる方法はありますか?スーパー呼び出すとき派生クラスに渡されるオプションを拡張するTypescriptのベストプラクティス

interface BaseOptions { 
    arg1: string; 
} 

class BaseClass { 
    constructor(options: BaseOptions) { } 
} 

interface DerivedOptions extends BaseOptions { 
    arg2: string; 
} 

class DerivedOptions extends BaseOptions { 
    constructor(options: DerivedOptions) { 
    super(); 
    } 
} 

答えて

2

ええ、それはあなたがオプションを渡すのを忘れていることを除いて、それを行うための正しい方法だオブジェクト:type aliasを使用するよう

class DerivedOptions extends BaseOptions { 
    constructor(options: DerivedOptions) { 
    super(options); 
    } 
} 

を、それはあなたにはうまく動作しません。ケース(Interfaces vs. Type Aliasesで述べたように)ため:

より重要な違いは、そのタイプの別名は 延長またはから実現することができない第二(またそれらが実装/拡張することができ他の タイプ)。ソフトウェアの理想的な特性は 拡張になっているので、可能であれば が可能な場合は、常にタイプエイリアスを使用してください。

ので、この:

type BaseOptions = { 
    arg1: string; 
} 

type DerivedOptions extends BaseOptions = { 
    arg2: string; 
} 

は不可能であり、エラーの数でコンパイルされません。

関連する問題