2017-05-27 77 views
2

這是我在JavaScript做如何使用裝飾覆蓋類的靜態方法打字稿

class A { 
    static foo (a, b, callback) { 
    setTimeout(() => { 
     let result = doSomethig(a, b) 
     callback(result) 
    }, 1000) 
    } 
} 

function decorator (OriginalClass) { 
    return class extends OriginalClass { 
    static foo (a, b) { 
     return new Promise((res) => { 
     super.foo(a, b, (result) => { 
      res(result) 
     }) 
     }) 
    } 
    } 
} 

@decorator  
class B extends A { 
} 

let result = await B.foo(10, 20) 

我要覆蓋一個類的方法,並在被覆蓋的方法,我想調用原始方法。在Typescript中有沒有辦法做到這一點?

回答

0

你可以做這樣的事情:

class A { 
    static bar() { 
    console.log("barA"); 
    } 
} 

function decorator(OriginalClass: any) { 

    let baseBar = OriginalClass.bar; 
    OriginalClass.bar = function() { 
    baseBar(); 
    console.log("barOverridden"); 
    } 
    return OriginalClass; 
} 

@decorator  
class B extends A { 
} 

B.bar(); 
+0

謝謝,但是當我想改變方法簽名就不能正常工作。我也改變了我的代碼。 – hronro