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