Typescript 很想从其中的一个类中获得“this”';装饰工

Typescript 很想从其中的一个类中获得“this”';装饰工,typescript,Typescript,我有一个typescript类装饰器,我需要在一个单例上注入一个类实例,到目前为止我拥有的是: //provider.decorator.ts 从“./Injector”导入注入器; 导出默认函数提供程序( 建造师:T ) { 注入器寄存器('范围',构造函数); 返回类扩展构造函数{}; } //项目中的第一个实例化类 @提供者 导出类思想Frastack扩展了cdk.Stack{ 构造函数(作用域:cdk.Construct,id:string,props?:cdk.StackProps){

我有一个typescript类装饰器,我需要在一个单例上注入一个类实例,到目前为止我拥有的是:

//provider.decorator.ts
从“./Injector”导入注入器;
导出默认函数提供程序(
建造师:T
) {
注入器寄存器('范围',构造函数);
返回类扩展构造函数{};
}
//项目中的第一个实例化类
@提供者
导出类思想Frastack扩展了cdk.Stack{
构造函数(作用域:cdk.Construct,id:string,props?:cdk.StackProps){
超级(范围、id、道具);
const dynamo=新的发电机();
}
}
这不起作用,因为构造函数不是类实例


我所能做的是在
ThoughtInfraStack
上调用我的Singleton并注入
这个
,但我真的很想用一个装饰师来做这件事

您可以扩展类的构造函数并在其中添加注入逻辑:

function Provider<T extends { new(...args: any[]): {} }>(
    konstructor: T
) {
    const klass = class extends konstructor {
        constructor(...args: any[]) {
            super(args)
            Injector.register('scope', this);
        }
    }

    return klass;
}
函数提供程序(
康斯特:T
) {
const klass=类结构器{
构造函数(…参数:任意[]){
超级(args)
注入器寄存器(“范围”,本);
}
}
返回克拉斯;
}

这听起来很聪明,但我没能让它工作,我的项目与你们操场上的项目的唯一区别是我的类
Foo
扩展了一个不同的类,它需要通过调用
super
传递一些构造函数道具,然后我尝试使用注册的范围,我得到一个错误,说范围没有扩展
cdk.Construct
,这是我的原始类需要扩展的。实际上,它似乎与AWS cdk更相关,而不是与typescript,因为您的解决方案在不使用cdk时运行得很好