Javascript 在typescript注释中动态扩展类

Javascript 在typescript注释中动态扩展类,javascript,oop,typescript,decorator,Javascript,Oop,Typescript,Decorator,假设我有两个班,A班和B班。 我想创建一个typescript注释,该注释执行动态扩展类的相同操作。 我不能使用extends,因为类A只有在运行时才知道。所以在结果中,我希望类A扩展B{} 但是有一个动态的 我已尝试创建注释: function extendsWithB(target) { //do something to extends the target with B class return target; } 可以这样使用: @extendsWithB Class

假设我有两个班,A班和B班。 我想创建一个typescript注释,该注释执行动态扩展类的相同操作。 我不能使用extends,因为类A只有在运行时才知道。所以在结果中,我希望类A扩展B{} 但是有一个动态的

我已尝试创建注释:

function extendsWithB(target) {
  //do something to extends the target with B class
  return target;
}
可以这样使用:

 @extendsWithB
   Class A {}
你知道我应该在注释里放什么吗


编辑:这个问题纯粹是理论性的。我不想在生产或其他方面尝试这一点。

我认为您可以通过这样做获得类似的效果:

export function Ext(bCtor: any) 
{
    return (aCtor: any) => 
    {
        Object.getOwnPropertyNames(bCtor.prototype).forEach(name => {
            aCtor.prototype[name] = bCtor.prototype[name];
        });
    }
}
并应用它:

@Ext(B)
class A
{
    //...
}

当然,没有更多的类型检查,因为typescript不知道这种黑客行为。

您无法在运行时扩展该类,因为typescript在运行时不存在。相反,在生成的JavaScript中(至少在es6之前)没有类,所以实际上您要做的是在TypeScript类的帮助下修补生成的最终JavaScript对象。我不明白的另一点是,为什么不使用标准的
extends
功能。您想创建批注,但仍需要在类定义中包含此批注?谢谢。这就是我要找的。事实上,我问这个问题是因为我想知道为什么angular2选择使用@Component这样的注释,而不是像react那样扩展组件。