質問: 昔JavaScriptで書いた変なコードをTypeScriptに置き換えようとしています。ですが `Property 'g' does not exist on type 'BaseClass'.` というエラーを回避できません。 オリジナルのコードのロジックを改変せずに、型定義や修飾子の追加で移行する方法を知りたいです。 ``` class BaseClass { h() { /* ... */ } f() { if (this.g) { this.g(); this.h(); } } } class ExampleClassA extends BaseClass { /* 継承してgメソッドを実装する場合 */ g() { /* ... */ } } class ExampleClassB extends BaseClass { /* 継承してもgメソッドを実装しない場合 */ } /* BaseClassが直接呼ばれることはありません */ new ExampleClassA().f(); new ExampleClassB().f(); ``` ( でも警告が出ることを確認しました) 型の追加では対応できない場合、どういう書き換えで乗り切ればよいか、よいアイディアがあれば教えてください。
回答: BasicClassにgというプロパティが定義されていないから > > Property 'g' does not exist on type 'BaseClass' > > > というエラーが起きています。 "if (this.g)"という使い方をしているので、gの型はbooleanなのでしょう。 ``` class BaseClass { h() { /* ... */ } f() { if (this.g) { this.g(); this.h(); } } ``` } にgを定義する行を加えて ``` class BaseClass { privaten g: boolean; h() { /* ... */ } f() { if (this.g) { this.g(); this.h(); } } ``` とすれば、とりあえずエラーは消えると思います。 gに値を与える部分など、コードに追加すべきものが他にもあると思われます。