我想向來自庫的已存在類添加一些方法。在Typescript中,爲來自庫的類創建擴展方法
已知一些基本類型,如String
,Element
可以通過interface
擴展並添加它的prototype
。
interface String {
extFunc():Function;
}
String.prototype.extFunc = function() {
//blabla
};
"a".extFunc();
我也找到了添加擴展方法Observable<T>
的方法。
declare module 'rxjs/Observable' {
interface Observable<T> {
foo: String;
}
}
Observable.prototype.foo= "bar";
console.log(Observable.of("a").foo);
但是,當我試圖做同樣的事情給NavController(從離子的LIB),它將覆蓋整個NavController給我申報的接口。
declare module 'ionic-angular' {
interface NavController {
replace(page: Page): Promise<any>;
}
}
navCtrl.replace(...); //ok
navCtrl.push(...); //original function => "not exist"
有沒有人知道什麼是擴展方法添加到這些類的最佳方式?謝謝〜
編輯: 有實際的代碼
import {Component} from '@angular/core';
import {NavController} from 'ionic-angular';
import {GuidePage} from '../guide/guide.component';
@Component({
selector: 'page-home',
templateUrl: 'home.component.html'
})
export class HomePage {
pageName = "home";
// navCtrl is come from angular2's Dependency Injection,
// it may not suitable to extend NavController
constructor(public navCtrl: NavController) {}
gotoGuide(): void {
//wanna replace this
this.navCtrl.push(GuidePage).then(() => {
let index = this.navCtrl.getActive().index;
this.navCtrl.remove(index - 1);
});
//with this custom extension method
//this.navCtrl.replace(GuidePage);
}
}
感謝您的回答,但我想添加方法的類來自於angular2的依賴注入,換言之,它來自構造函數()。看到更多的細節。 https://angular.io/guide/dependency-injection#injectable –
也許你可以用你的實際代碼來澄清你的問題,包括依賴注入。 – Kokodoko
好的!我發佈了我的實際代碼,感謝您的建議。 –