typescriptでこのパターンに似たものを得るにはどうすればよいですか?Typescript子クラスの関数オーバーロード
class A {
Init(param1: number) {
// some code
}
}
class B extends A {
Init(param1: number, param2: string) {
// some more code
}
}
それが動作するはずのように上記切り取らコードは、しかしHow Typescript function overloading worksの精査の上、それはエラーがスローされていることを理にかなって、表示されます。
TS2415: 'Class 'B' incorrectly extends base class 'A'.
Types of property 'Init' are incompatible.
私はコンストラクタ関数は、この動作が許可されていることを知っているが、Iこれらのオブジェクトはメモリ効率のためにプールされるため、コンストラクタはここでは使用できません。私は初期化(の別の定義を提供することができ
)クラスAでは:
class A {
Init(param1: number, param2: string): void;
Init(param1: number) {
// some code
}
}
しかし、これは今、基本クラスはその派生クラスのすべてについて知っておく必要があるので、理想的な未満です。
第3のオプションは、クラスBのInitメソッドの名前を変更することですが、それはかなり醜く混乱するだけでなく、ベースクラスのInit()メソッドを公開しているため、検出が困難なバグ基本クラスInit()が間違って呼び出されたとき。
上記の方法の落とし穴がないこのパターンを実装する方法はありますか?
ご回答ありがとうございます。私はそれを避けることができる場合は、実行時の型チェックを行う必要はありませんが好きですが、Typescriptは他のほとんどのことを防ぐために管理しています。 – Daniel
残念ながら、サブクラスのメソッドシグネチャがベースクラスのシグネチャと一致しない場合は、ランタイムチェックなしでは実行できません。私の最初の例を見てみましょう:誰かがあなたのサブクラスを実際にベースクラスであるかのように呼んでいるかもしれません – zlumer
ああ、今、私は今理解していると思います。おそらく私は両方のクラスを抽象基本クラスから他の共通のプロパティを継承させるでしょう。 – Daniel