【问题标题】:Can typescript class decorators be optional when creating an instance?创建实例时,打字稿类装饰器可以是可选的吗?
【发布时间】:2018-08-29 10:03:46
【问题描述】:

According to wikipedia,装饰器模式允许你用额外的功能装饰一个类的实例,例如:

let ball = new BouncyBall(new Ball())

Ball 实例使用来自BouncyBall 类的额外代码进行装饰。我仍然可以得到一个普通的Ball

let simpleOldBall = new Ball()

现在,当我查看 Class Decoratorstypescript docs 时,似乎所有 Ball 实例都将自动使用 bouncyBall 代码进行装饰:

@bouncyBall
class Ball {
}

在 Typescript 中使用 Class Decorators 时如何创建球弹力球?

【问题讨论】:

    标签: typescript oop decorator


    【解决方案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();
    

    【讨论】:

    • 谢谢!我没有想到mixins,会调查一下!我不得不说,它看起来有点乱是不是? (需要泛型、额外的构造函数类型、any 数组和扩展构造函数......)我想我仍然可以使用维基百科的标准模式,没有理由在 Typescript 中不起作用?跨度>
    猜你喜欢
    • 2017-12-19
    • 2020-05-31
    • 2011-05-18
    • 2011-01-22
    • 2017-02-04
    • 2018-02-12
    • 2020-02-10
    • 1970-01-01
    • 2021-09-30
    相关资源
    最近更新 更多