3

ツールによって生成されている TypeScript コードがいくつかあります。このクラスを別のファイルで拡張したいと思います。0.9.1.1 の時点で、これを行う最善の方法は何ですか?

追加の関数をプロトタイプに留めることができるのではないかと考えましたが、これによりさまざまなエラーが発生しています (コンパイラの気分によって異なります)。

例えば:

Foo.ts (ツールで生成)

module MyModule {
    export class Dog { }
}

Bar.ts

module MyModule {
    function bark(): string {return 'woof';}

    Dog.prototype.bark = bark;
}
4

2 に答える 2

0

以前にもあなたの問題に遭遇しましたが、もっと深い問題がありました。バサラトの例から、単純な関数をプロトタイプの拡張として追加できることがわかりますが、静的関数または他の静的値に関しては、(おそらくサードパーティの) クラスを拡張したい場合、TSC は警告します。クラスで静的に定義されたそのようなメソッドはありません。

私の回避策は、次の小さなハックでした。

module MyModule {
     export function Dog(){};
}

// in the other file
if (typeof MyModule !== 'undefined'){
    Cast<any>(MyModule.Dog).Create = ()=>{return new Dog();};
}

// where Cast is a hack, for TS to forcefully cast types :)
Cast<T>(element:any):T{ return element; } 

これは、MyModule.Dog を任意のオブジェクトにキャストする必要があるため、あらゆる種類のプロパティ、関数をアタッチできます。

于 2014-05-12T19:58:25.173 に答える