2017-02-10 47 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'。 –