2016-10-04 11 views
1

"mixin"パターンを使用して任意のオブジェクトにプロパティを追加するサードパーティのJavaScriptライブラリを使用しています。 TypeScriptが継承を使用せずに、または型定義に明示的に追加することなく、これらのプロパティを認識するようにしたいと思います。実行時にmixinを介して実行時にTypeScriptにメソッドをオブジェクトに追加させる

function ThirdParty(objectToMutate: any): void { 
    objectToMutate.newMethod = function(): void { ... } 
} 

class MyClass { ... } 

var myObject = new MyClass(); 

ThirdParty(myObject); 

myObject.newMethod(); 

活字体がMyClassnewMethodを追加することなく、かつThirdPartyを変更せずにmyObject.newMethod()を認識させる方法はありますか?私はサルのパッチで大丈夫です。

+1

方法それについて知りませんでしたか? –

+0

私は第三者コンポーネントのインターフェイス宣言を変更することができます、キャストなどを入力することができます。私は、typescriptコンパイラに "次のプロパティが' myObject'に追加されたことを伝えたいと思います – alexanderbird

答えて

1

あなたが追加したメソッド(複数可)で構成されてインターフェースを定義し、次にタイプと、この新しいインタフェースに渡されたの関数の戻りan intersectionを持つことができます。

interface ThirdPartyInstance { 
    newMethod(): void; 
} 

function ThirdParty<T>(objectToMutate: T): T & ThirdPartyInstance { 
    (objectToMutate as any).newMethod = function(): void { }; 
    return objectToMutate as T & ThirdPartyInstance; 
} 

class MyClass { } 

var myObject = ThirdParty(new MyClass()); // myObject is of type MyClass & ThirdPartyInstance 

myObject.newMethod(); 

code in playground

関連する問題