2013-06-21 8 views
5

には、上書きのようなベースクラスから関数を呼び出す方法があります。ベースクラスのTypescriptコール関数

基本クラス

export class BaseClass { 
    constructor() { 
    //do something asynchronous 
    //than call initialized 
    } 
} 

継承クラス

export class InheritanceClass extends BaseClass { 
    initialized() { 
    // get called from base class 
    } 
} 

答えて

7

は、あなたがこのように意味するか:

class Base { 
    constructor(){ 
     setTimeout(()=>{ 
      this.initialized(); 
     }, 1000); 
    } 

    initialized(){ 
     console.log("Base initialized"); 
    } 
} 

class Derived extends Base { 
    initialized(){ 
     console.log("Derived initialized"); 
    } 
} 

var test:Derived = new Derived(); // console logs "Derived initialized" - as expected. 

作品はPlaygroundにも(setTimeout()の奇数の赤い下線を無視してください。これはバグだと思います。コンパイルして正常に動作します)。Baseにはメソッドが必要ですが、 Derived(または、この場合のようにsuper.initialized()への呼び出しなし)で上書きできます。

+0

基本クラスがAnimalで、派生クラスがDogだったら、walkメソッドを使うことができますが、SnakesとBirdsについては、動物クラスでSlitherとFlyメソッドを使用しますか? –

+0

異なるユースケース。 TypeScriptの抽象メンバが必要ないことを示唆しているわけではありません。単に、「非同期なものを実行し、初期化を呼び出す」ためのOPの要求に正確に対処するだけで、「ベースクラスから関数を呼び出す(typum :)オーバーライド" – JcFx

2

あなたは抽象クラスの抽象メンバーとして初期化されている必要があるだろうことを行うために。このしかし、機能がために頼まれましたサポートしていない現在、活字体およびそれのためのオープンな作業項目があります:

http://typescript.codeplex.com/workitem/395

+0

私はこれが正しいとは確信していません。下記参照。 – JcFx

+0

初期化をベースに存在させたくない場合は、それが答えです。それ以外の場合は、オーバーライドになります。 厳密に言うと、醜い方法がありますが、奨励されるべきではありません。 –

+0

奨励されるべきではありませんか?これは単純なオーバーライドです。 OPは抽象メソッドを要求していません - それをオーバーライドする能力だけです。 – JcFx

関連する問題