2016-08-26 3 views
0

を拡張するなど、周囲の名前空間でそのインタフェースで、特定のライブラリから(のは、O、それを呼びましょう):活字体:私は純粋なJavaScriptオブジェクトを持っている既存のJavaScriptオブジェクトに

declare namespace N { 
    interface IO { 
     // properties... 
    } 
} 

私は活字体クラスを作成する必要がありますこのJavaScriptオブジェクトを拡張します。それを拡張するメカニズムはライブラリによって提供されるので、ネイティブTS継承を使用することはできませんが、私はこのJSオブジェクトのすべてのプロパティにアクセスする必要があります。私は、このインタフェースを実装するクラスを宣言し、それを拡張してみました:

declare class DummyO implements N.IO { 
    // copy-paste everything from N.IO 
} 

class MyRealClass extends DummyO { 
} 

今、私はすべてのプロパティへのアクセス権を持っているだけでなく、二つの問題:

  1. 私はコピー&ペーストして、全体のインターフェースを持っていました、それほど実用的ではありません。
  2. TypeScriptはDummyO(これは良い)の定義を作成しませんが、同時にその固有のメカニズム(DummyOは実際には存在しないので悪い)を使用して拡張しようとします。

だから、どうしたらいいですか?このネイティブオブジェクトを効果的に拡張するTSクラスを作成するにはどうすればよいですか?あるいは、TSを本当に継承しているということを、そのような面倒なことなしに納得させる別の方法がありますか?私の知っている

+0

なぜ 'MyRealClass'は' N.IO'を直接実装していませんか? –

+0

N.IOは既にJavaScriptオブジェクト(O)によって完全に実装されています。 TSは実際の実装なしでN.IOのコピー貼り付けを許可しますか? – krojew

+0

N.IOはインターフェイスであればどのように実装できますか?私は何かが欠けているかもしれませんが、これはうまくいくと思われます:https://www.typescriptlang.org/play/#src=declare%20namespace%20N%20%7B%0D%0A%20%20%20%20interface% 20%20%7%0%0%%09%09%プロパティ%3A%20%%20%%20%20%20%20%20%20%7%20%30%0% 20N.IO%20%7B%0D%0A%09プロパティ%3A%20 '値%0D%0A%7D。私はDummyOの余分な価値が何であるか分かりません。 –

答えて

0

ザ・唯一の作業溶液はかなりコピー、貼り付けクラスにインターフェースを次のとおりです。

declare namespace N { 
    interface IO { 
     // example properties: 
     a: number; 
     f(): number; 
    } 
} 


class MyRealClass implements N.IO { 
    // copy IO 
    a: number; 
    f:() => number; 

    // add "real" members later... 
} 

それはきれいではありませんが、それはあなたが図書館でカスタム継承ソリューションで何を得るのです。

+0

これは、ほとんどの使用例では間違っているようです。答えには、外部JSオブジェクトへの参照はまったく含まれていません。 –

+0

質問として、外部参照と継承は外部ライブラリによって処理されます。 – krojew

+0

しかし、これは、typescriptでカバーされていないいくつかのコードがあることを意味します。おそらく、プロパティを複製しなければならない理由があります。なぜなら、コードがカバーされていれば、プロパティは正しく継承されるからです。いくつかのサンプルコードを提供していただけますか? –

関連する問題