在创建实例时,typescript类装饰符可以是可选的吗?

在创建实例时,typescript类装饰符可以是可选的吗?,typescript,oop,decorator,Typescript,Oop,Decorator,,decorator模式允许您使用额外的功能装饰类的实例,例如: let ball = new BouncyBall(new Ball()) Ball实例用bounchball类中的额外代码装饰。我仍然可以得到一个普通的球: let simpleOldBall = new Ball() 现在,当我查看for类装饰器时,似乎所有Ball实例都将自动用bounchball代码装饰: @bouncyBall class Ball { } 在Typescript中使用类装饰器时,如何创建球和弹性球

,decorator模式允许您使用额外的功能装饰类的实例,例如:

let ball = new BouncyBall(new Ball())
Ball
实例用
bounchball
类中的额外代码装饰。我仍然可以得到一个普通的

let simpleOldBall = new Ball()
现在,当我查看for类装饰器时,似乎所有
Ball
实例都将自动用
bounchball
代码装饰:

@bouncyBall
class Ball {
}

在Typescript中使用类装饰器时,如何创建球和弹性球?

类装饰器在类声明之前声明,因此适用于该类的所有实例

在你的情况下,你可能想调查一下。这将允许这样的操作:

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();
type构造函数=new(…args:any[])=>T;
函数弹跳(基数:T){
返回类扩展了基{
弹跳(){
console.log('Bounce!');
}
}
}
班级舞会{
}
const BouncyBall=弹跳(球);
const bouncyBall=新的bouncyBall();
bounchball.bounce();

谢谢!我没有想到mixins,我会调查的!我得说,它看起来有点乱,不是吗?(需要泛型,一个额外的构造函数类型,一个
any
数组,并扩展一个构造函数……)我想我仍然可以使用维基百科的标准模式,没有理由在Typescript中不起作用