动态扩展了typescript注释中的类

时间:2016-04-02 05:31:36

标签: javascript oop typescript decorator

假设我有2个班,A和B. 我想创建一个typescript注释,它可以动态地扩展类。 我不能使用extends,因为类A只在运行时已知。所以在结果中我希望类A扩展B {} 但是A动态。

我试图创建一个注释:

function extendsWithB(target) {
  //do something to extends the target with B class
  return target;
}

这可以这样使用:

 @extendsWithB
   Class A {}

关于我应该在注释中添加什么的任何想法?

编辑:这个问题纯粹是理论上的。我不想在制作或其他方面尝试这个。

1 个答案:

答案 0 :(得分:2)

我认为你可以通过做这样的事情来达到预期的效果:

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

并应用它:

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

当然没有更多的类型检查,因为打字稿不知道这个黑客。