2016-04-02 14 views
1

クラスAとBの2つがあるとします。 クラスを動的に拡張する同じことを行うtypescript注釈を作成したいとします。 クラスAは実行時にしか認識されていないので、私はextendsを使用できません。その結果、クラスAはB {} を拡張します。typescript注釈の動的拡張クラス

私は注釈を作成しようとしました:

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]; 
     }); 
    } 
} 

そして、それを適用します:私はあなたがこのような何か実行して所望の効果に似て得ることができると思い

+0

実行時にTypeScriptが存在しないため、ランタイムでクラスを拡張することはできません。生成されたJavaScript(少なくともes6まで)にはクラスがないので、実際にやりたいことは、TypeScriptクラスの助けを借りて生成された最終的なJavaScriptオブジェクトにパッチを当てることです。私が得られない別の点は、標準の 'extends'機能を使わない理由です。アノテーションを作成したいが、このアノテーションをクラス定義に含める必要がありますか? – smnbbrv

答えて

2

typescriptですとして当然の

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

これ以上の型チェックは知りませんこのハック

+1

ありがとうございます。これは私が探していたものです。なぜなら、angle2が、reactのようにextendsコンポーネントのように@Componentのような注釈を使用する理由を選んでいるのだろうかと疑問に思っていたからです。 – Cnode

関連する問題