According to wikipedia,装饰器模式使您可以使用额外的功能来装饰类的实例,例如:
let ball = new BouncyBall(new Ball())
Ball
实例得到了BouncyBall
类的额外代码修饰。我仍然可以获得常规的Ball
:
let simpleOldBall = new Ball()
现在,当我查看类装饰器的typescript docs 时,似乎所有Ball
实例都将自动用bouncyBall
代码修饰:< / p>
@bouncyBall
class Ball {
}
在打字稿中使用 Class Decorators 时,如何创建球形和弹力球?
答案 0 :(得分:1)
在类声明之前声明了一个类装饰器,因此适用于该类的所有实例。
在您的情况下,您可能需要研究mixins。这将允许这样的事情:
type Constructor<T> = new(...args: any[]) => T;
function Bouncy<T extends Constructor<{}>>(Base: T) {
return class extends Base {
bounce() {
console.log('Bounce!');
}
}
}
class Ball {
}
const BouncyBall = Bouncy(Ball);
const bouncyBall = new BouncyBall();
bouncyBall.bounce();