创建实例时,打字稿类装饰器可以是可选的吗?

时间:2018-08-29 10:03:47

标签: typescript oop decorator

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 时,如何创建球形弹力球?

1 个答案:

答案 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();