2017-01-13 24 views
1

一般的なプロパティにいくつか問題があります。そしてそれのためのいくつかの解決策。以下のコードに関して、他の解決策を提案できますか?Typescriptの継承と汎用プロパティ

interface IConfig{ 
    property?: number; 
} 

interface IChildConfig extends IConfig{ 
    otherProperty?: number; 
} 

class Base<T extends Base<any, IConfig>, U extends IConfig>{ 

    protected _config: U | IConfig = { 
    property: 10 
    }; 

    public config(){ 
    return <U>this._config; 
    } 
} 

class Child extends Base<Child, IChildConfig>{ 

    protected _config: IChildConfig = { 
    property: 20, 
    otherProperty: 10 
    } 
} 

let a = new Child(), 
    b = new Base(); 

a.config(); 
b.config(); 

例では、_configプロパティタイプをU |エラーを回避するIConfig "| Config"パートコンパイラを削除すると、エラーが発生します。 私が理解しているように、タイプUはIConfigインターフェイスと等しくなければなりません。

答えて

2

_configを入力してUと入力すると、_configが実際にはUに依存しているため、タイプスクリプトではこれが可能になりません。 JavaScriptにはプロパティのオーバーロードもありません。

ソリューションは、あなたが本当に達成したいかに依存しますが、これは動作します:

abstract class Base<T extends Base<any, IConfig>, U extends IConfig>{ 
    abstract config(): U; 
} 
+0

はあなたのLodewijkをありがとうございます。なぜ私は異なる子供が独自のconfigまたは基本設定プロパティを持つことができるような構造を必要としているのか、という理由でconfigを拡張することができ、それ以外の場合は基本とすることができます。 – Vayrex

関連する問題