、のは角2の例から始めてみましょう:拡張メソッドをインポートする必要があるのはなぜですか?この質問は、角-2特異的ではありませんが
import { Http } from "@angular/http";
import "rxjs/add/operator/toPromise";
// ...
private foo() {
return this.http.get(url).toPromise();
}
toPromise()
はthis.http.get(url)
によって返さObservable<Response>
ための拡張メソッドです。 rxjs/add/operator/toPromise
をインポートする場合にのみ使用することができます。そうしないと、コンパイラは不平を言います。
import { toPromise } from '../../operator/toPromise';
declare module '../../Observable' {
interface Observable<T> {
toPromise: typeof toPromise;
}
}
しかし、私自身の拡張メソッドのために、何のインポートが必要ありません:
私-class.ts:
export class MyClass {}
私のクラス-拡張子このファイルtoPromise.d.ts
には、次の内容を持っています.ts:
import { MyClass } from "./my-class" ;
declare module "./my-class" {
interface MyClass {
myExtensionMethod;
}
}
MyClass.prototype.myExtensionMethod =() => {};
(または、最後の行を削除してファイルをb my-class-extensions.d.ts
に改名E)
私-consumer.ts:。
のでimport { MyClass } from "./my-class";
// No import necessary:
// import "./my-class-extensions";
// ...
foo(obj: MyClass) {
obj.myExtensionMethod(); // Still fine!
}
、なぜあなただけの、時には拡張メソッドをインポートする必要がありますか?私の拡張メソッドを「モジュラー」にするにはどうしたらいいですか?
彼らは同じモジュール '私-class'の一部であるように見えます。モジュール名が異なっていても、それは当てはまりませんか? –
'declare module" ./my-class "を' 'declare module" ./my-class-extensions "'に変更することを意味しますか? –
ええ、そういう意味です。あなたがそれをすることができるかどうかはわかりませんでしたが。 –