2017-02-10 49 views
0

我有一個函數用於決定哪個服務必須被調用,並且我有一個函數模板用於使用從該函數返回的服務進行調用。這個函數調用http.get/http.post等,它返回一個Observable,並對返回的數據做一個映射。 正如您在下面看到的,我在此處訂閱基於服務名稱的服務內的通用函數模板。問題在於,服務沒有被直接調用,而是通過函數在subscribe()中創建了一個問題,其中數據由於隱含類型'any'而被標記。有沒有辦法在訂閱內進行類型轉換? 像Angular 2來自通用函數的服務調用

subscribe(
data:string => { 

}) 

否則我不得不對應用程序的名字直接調用構造函數注入的服務做的開關。即使在這裏,我通過構造函數注入,但我可以通過這種方式減少代碼行。

我的代碼 -

export class MyComponent { 

private service:any; 
private appName:string; 

constructor(private _service1:Service1, 
route:ActivatedRoute){ 
this.appName = this.route.snapshot.params['app']; 
this.service = this.getService(appName); 
} 

getService(serviceName: string): any { 
      var service: {}; 
      switch (serviceName) { 
       case "Service1": 
        service = this._service1; 
        break; 
       default: 
        break; 
      } 
      return service; 
     } 
runJob(){ 
    this.service.runJob() 
    .subscribe(
     data => { 
    // My code here. This gives error as data is mentioned as implicitly of type 'any' 
     }, 
     err => { 
    // My actions. Same issue here too 
    }) 

} 

} 

感謝。

回答

0

是的,你可以喜歡這類型的傳遞的數據:

myService.getSomething().subscribe((data: DataType) => { 
    // do something with data 
}); 
+0

沒錯,但一個更好的解決辦法是調整'runJob',以便它返回一個'可觀察''那裏是T'不' any'。 –