2017-05-27 40 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